#40886 [Opn-Bgs]: static methods assigned to instances

2007-03-22 Thread cellog
 ID:   40886
 Updated by:   [EMAIL PROTECTED]
 Reported By:  andrea at 3site dot it
-Status:   Open
+Status:   Bogus
 Bug Type: Class/Object related
 Operating System: Windows XP SP2
 PHP Version:  5.2.1
 New Comment:

this bug really shows how one person's bug is another person's 
feature. :)

the syntax $a-method() allows you to call a static method of the 
class that $a is an instantiated object of, something I find useful 
for objects that contain static methods in a parent/child 
inheritance hierarchy.  Using $a-method(), I don't need to do 
hackery to figure out which class $a is in order to call one of 
its static methods.  Consider the alternative:

?php
call_user_func_array(get_class($a), 'method', $args);
?

The above is the only alternative (save using reflection, which is 
even more verbose and inefficient) to:

?php
$a-method($arg1, $arg1);
?

Which syntax do you prefer?

The big difference between php 4 and php 5 is that a method declared 
as static does not have $this set.  You'll get a fatal error, in 
fact, if you try to use $this in a static method.

Why do you care so much about whether it's called with 
class::method() or $this-method()?  You can't have two methods with 
the same name, one static and one non-static, so there is no 
possibility of accidentally calling the wrong one.

If you are wanting absolutely perfect OO, there are plenty of 
other languages that will provide exactly the straightjacket and 
punishment you desire.  If you want to code efficient, easy to 
maintain, working programs, use PHP.


Previous Comments:


[2007-03-22 12:28:44] andrea at 3site dot it

Derick, this is a bug (any Object Oriented logic).
There's something wrong in your static keyword implementation, at least
for methods that uses static keyword.

This my last call and this is my last example:

?php
class ExampleClass {

public  $StaticExample;

public final function __construct(){
// bye bye public *parameter*
$this-StaticExample = create_function('$never', 'return 
welcome
PHP5 ambiguity;');
}

public final static function StaticExample(){
echo StaticExample, br /;
}
}

$test = new ExampleClass();
ExampleClass::StaticExample();
exit($test-StaticExample());
?

What does static keyword mean for PHP 5 developers?
If this is an expected behaviour you should explain them in
documentation page.

Regards (I'll never open again this *bug*)



[2007-03-22 12:18:16] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php





[2007-03-22 12:15:28] [EMAIL PROTECTED]

Not enough information was provided for us to be able
to handle this bug. Please re-read the instructions at
http://bugs.php.net/how-to-report.php

If you can provide more information, feel free to add it
to this bug and change the status back to Open.

Thank you for your interest in PHP.




[2007-03-22 11:29:22] daniele_dll at yahoo dot it

Hi,

i was talking with andrea yesterday evening and he was explaining me
that stuff.

I don't know if it is an expected behaviour or not, but i'm sure that
somewhere there is a problem!

Infact, if it is an expected behaviour the static keyword loss it
meanings and, probably, slowdown the php page compilation/execution, but
if it is normal documentation should be fixed because it says a totally
different stuff.

However, to get back to the problem, the manual says, as should be:
A member declared as static can not be accessed with an instantiated
class object

Because is a non sense say that something is static and after let to
the code to call it as non static



[2007-03-22 11:19:48] andrea at 3site dot it

This cannot be an expected behaviour because in this way a static
method is exactly the same of a generic public method.

Static parameters aren't (correctly) usable with instances so why
static methods should be assigned?

If this is an expected behaviour please tell us what do You think
static keyword means and explain them correctly on documentation page.



The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/40886

-- 
Edit this bug report at http://bugs.php.net/?id=40886edit=1


#40886 [Opn-Bgs]: static methods assigned to instances

2007-03-21 Thread tony2001
 ID:   40886
 Updated by:   [EMAIL PROTECTED]
 Reported By:  andrea at 3site dot it
-Status:   Open
+Status:   Bogus
 Bug Type: Class/Object related
 Operating System: Windows XP SP2
 PHP Version:  5.2.1
 New Comment:

Expected behaviour.


Previous Comments:


[2007-03-21 20:13:21] andrea at 3site dot it

damn ... http://www.php.net/manual/en/language.oop5.static.php

Declaring class members or methods as static makes them accessible
without needing an instantiation of the class. A member declared as
static can not be accessed with an instantiated class object (though a
static method can).

Well ... C# and other languages doesn't assign static methods to
instances.

C++ does it but it assign static parameters too.

With PHP 5 we can't use the same name for 2 different methods (for
example one static and one public) but we can call a static method
without static declaration (only E_STRICT tells us there's something
wrong) while C++ can't call a public method, or parameter, with a class
if it's not declared as static.

At this point, why did You introduce the static method/property type?
This implementation is not Object Oriented, it's quite Hilarius
Oriented.

Sorry for this bug (and for me it's really a bug!).
Regards.



[2007-03-21 18:56:54] andrea at 3site dot it

Description:

Description:

I don't know if it is by design, but this is not what I would expect
logically ... (and with static variables it doesn't happen so it should
be a _strange_ logic)

I suppose this problem is related with this one:
http://bugs.php.net/bug.php?id=40837

but I think this one is *not* callable Irrelevant

Reproduce code:
---
?php
class ExampleClass {

public static function StaticExample(){
echo StaticExample, br /;
}

public function InstanceExample(){
echo InstanceExample, br /;
}
}

$test = new ExampleClass();
ExampleClass::StaticExample();  // ok
$test-InstanceExample();   // ok
$test-StaticExample(); // what the hell?
?

Expected result:

StaticExample
InstanceExample
FATAL ERROR ... undefined method StaticExample

Actual result:
--
StaticExample
InstanceExample
StaticExample





-- 
Edit this bug report at http://bugs.php.net/?id=40886edit=1