Greg Beaver schreef: > Martin Alterisio wrote: >> Consider the following code: >> >> foo.php: >> <?php >> class test { >> public static function foo() { echo "I'm foo in class test\n"; } >> public static function foo2() { self::foo(); } >> } >> ?> >> >> foo2.php: >> <?php >> namespace test; >> function foo() { echo "I'm foo in namespace test\n"; } >> ?> >> >> test.php: >> <?php >> include 'foo.php'; >> include 'foo2.php'; >> test::foo(); // I'm foo in namespace test >> use test::foo as dummy; >> test::foo(); // I'm foo in namespace test >> test::foo2(); // I'm foo in class test >> $test = 'test'; >> $test::foo(); // I'm foo in class test >> call_user_func(array('test', 'foo')); // I'm foo in class test >> ?> >> >> Please review the following observations: >> >> There's a name clash that goes undetected: test::foo refers to both a >> namespaced function and a static method. >> >> Once the clash occur there's no way to refer to the static method through a >> static reference, except when within the class scope where you can refer to >> the method through self:: >> The static method remains partially hidden by the namespaced function. > > Don't forget about ::test::foo() which refers to class test, method > foo(). However, this is an issue, and one of the main reasons I dislike > putting functions and constants in namespaces, as this ends up sort of > like OO without inheritance and confuses the issue of static methods as > you pointed out. > > However, having said that, in my experience, developers either use > functions or OO, very rarely mixing the two on an extensive basis, and > so name collisions become much less likely between static methods and > namespaced functions.
why exactly should we need to have this ambiguity and possible naming collision? I thought namespaces are about avoiding naming collisions? > > Greg > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php