[php 5.3] проблемы перехода на namespace

DYPA

Настоящая dypa (c)
[php 5.3] проблемы перехода на namespace

5.3 не имею под рукой, а сомнения терзают

начальные условия:

test.php
PHP:
<?php
class Test
{
 static $foo = 'bar';
 static function foo()
 {}
}
namespace.php
PHP:
<?php
namespace Test;
$foo = 'bar';
function foo()
{}
вопрос что будет происходить с кодом (будет использоваться класс Test или namespace Test ?):
PHP:
<?php
Test::$foo;
Test::foo();
ps не одного меня это беспокоит
http://www.php.net/manual/en/language.namespaces.php#80035
 

DYPA

Настоящая dypa (c)
2 tony2001:
а можно ли считать это багом в реализации namespace ?
имеет ли смысл дергать bugs.php.net с просьбой сменить разделитель для наймспейсов на любой другой (или получу стандартную отписку bogus, и пару переоткрываний бага для того что бы человек сел всетаки и разобрался с тестовым кодом) ?
 

tony2001

TeaM PHPClub
>а можно ли считать это багом в реализации namespace ?
что именно?

>имеет ли смысл дергать bugs.php.net с просьбой сменить разделитель для наймспейсов на любой другой
я надеюсь, это шутка?
если так, то она не смешная.

>получу стандартную отписку bogus
давай-ка сразу определимся:
ты один раз попросил поменять опцию в php.ini.
тебе отказали, т.к. никакого практического смысла это не несёт.
поскольку аргументировать свою позицию ты не смог, ты встал в позу обиженного.

никакой стандартной отписки bogus нет и не было, Johannes тебе всё понятно объяснил.
конечно, ты, возможно, не понял его объяснений, но это не отменяет факта.
 

DYPA

Настоящая dypa (c)
>>а можно ли считать это багом в реализации namespace?
>что именно?
возможность трактовать один и тот же кусок кода по разному
(с реализацией namespace в др языках я не знаком, поэтому я и спрашиваю это считается нормальным или нет)

>я надеюсь, это шутка?
>если так, то она не смешная.
шутка лишь мой ник, все остальное нет
например использование как разделителя ":" сняло бы проблему восприятия, работаем ли мы с namespace или с классом

на остальное ответил в приватном сообщении
 

tony2001

TeaM PHPClub
>возможность трактовать один и тот же кусок кода по разному

нет, конечно.

>например использование как разделителя ":" сняло бы проблему восприятия,
>работаем ли мы с namespace или с классом

разделитель обсуждался в течение нескольких месяцев.
я думаю, все будут очень рады, если ты станешь 10000-м, кто предложил свой разделитель, не прочитав предыдущего обсуждения.

>на остальное ответил в приватном сообщении

я тоже.
 

DYPA

Настоящая dypa (c)
>разделитель обсуждался в течение нескольких месяцев.
>я думаю, все будут очень рады, если ты станешь 10000-м, кто предложил свой разделитель, не прочитав предыдущего обсуждения.
думаю мой вопрос себя исчерпает если приведешь ссылку на это обсуждение
 

FractalizeR

Новичок
Похоже, что, все-таки, это беспокоит только вас, поскольку Amir Abiri точно знает, что именно будет вызвано.

Что касается вашего примера, то
тут http://docs.php.net/manual/en/language.namespaces.rules.php сказано следующее:

Код:
#   Calls to qualified functions are resolved at run-time. Here is how a call to A::B::foo() is resolved:

   1. It looks for a function foo() in the namespace A::B.
   2. It looks for a class A::B and call its static method foo(). It will autoload the class if necessary.
Test::$foo - в этом случае ясно, что мы имеем дело со статической переменной класса Test.
Test::foo() - а в этом, похоже, вступают в силу правила разрешения, поскольку это qualified function call. Т.е. сначала производится поиск функции foo() внутри пространства имен Test. Если такой нет, идет поиск класса Test в глобальном пространстве имен и вызов его статического метода foo().

Вообще, вопрос дурацкий, поскольку достаточно скачать последний доступный билд PHP 5.3 с http://snaps.php.net, чтобы проверить результат. Что я и сделал:

namespace.php:
PHP:
<?php
namespace Test;
$foo = 'bar';
function foo()
{
echo('I am foo from namespace Test');
}
?>
test.php
PHP:
<?php
class Test
{
 static $foo = 'bar';
 static function foo()
 {
echo('I am foo() of class Test');
}
}

?>
question.php:
PHP:
<?php
require_once('test.php');
require_once('namespace.php');
echo('Class var: '.Test::$foo);
Test::foo();
?>
Как и ожидалось, запуск question.php приводит к появлению
Код:
Class var: barI am foo from namespace Test
Использовался php5.3-win32-200801022130
 
Сверху