Stasonix
6.12.2012 - 20:32
Собственно учусь здесь:
http://www.ibm.com/developerworks/ru/libra...new3/index.htmlКодирую:
namespace Foo;
function bar()
{
echo 'calling bar';
}
Foo/bar();
ошибка:
Notice: Use of undefined constant Foo - assumed 'Foo' in foo.php at line 10.
Stasonix
6.12.2012 - 20:37
Цитата (m4a1fox @ 6.12.2012 - 16:36) |
php -version ????? |
Что, неужели забыл версию? А в заголовке не подходит что ли?
Stasonix
6.12.2012 - 20:46
namespace Foo;
function bar()
{
echo 'calling bar';
}
Foo/bar();
Foo\bar();
Вот так если напр. эти вызовы в 1-м файле, то ошибки будут. Т.е. получается нельзя вызывать в пространстве имен функции что ли?
Аааа, ну естественно, просто смысл тогда обращаться через пространство имен, если функцию можно и так вызвать
Игорь_Vasinsky
6.12.2012 - 20:48
может потому что пространство имён только для классов? хотя нет, там пример есть
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Stasonix
6.12.2012 - 20:55
И в продолжение:
include("./foo.php");
use Foo;
bar();
Абзац. Call to undefined function bar() пишет. Ну хоть на use Foo; не ругается.
Quieteroks
7.12.2012 - 09:36
StasonixС пространством имен нужно быть аккуратным и понимать что к чему...
Если ты все это делаешь в рамках одного файла, в пределах пространства, то он имя пространства должен автоматически подставить.
namespace Foo;
function bar()
{
echo 'calling bar';
}
bar();
Если ты подключаешь пространство, то тебе нужно использовать обращение к нему по полному имени или псевдониму.
include("./foo.php");
use Foo as f;
f\bar();
Если без use:
include("./foo.php");
\Foo\bar();
Как то так вроде.
Stasonix
7.12.2012 - 10:38
нууу, в примере-то совсем иначе, там же и use без алиаса, а это чревато оказалось, в общем какая-то ненадежная статья.
Quieteroks
7.12.2012 - 10:56
StasonixДа можно же и без псевдонима.
Последнее слово в пути будет ему псевдонимом.
Т.е.
use My\Name\Space\Foo
Foo\bar();