#40886 [Com]: static methods assigned to instances
| From: | daniele_dll at yahoo dot it | Date: | Thu, 22 Mar 2007 11:29:23 +0000 |
| Subject: | #40886 [Com]: static methods assigned to instances | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-110674@lists.php.net to get a copy of this message | ||
ID: 40886
Comment by: daniele_dll at yahoo dot it
Reported By: andrea at 3site dot it
Status: Open
Bug Type: Class/Object related
Operating System: Windows XP SP2
PHP Version: 5.2.1
New Comment:
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
Previous Comments:
------------------------------------------------------------------------
[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.
------------------------------------------------------------------------
[2007-03-21 21:02:53] tony2001@php.net
Expected behaviour.
------------------------------------------------------------------------
[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=40886&edit=1