[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Namespace - пространства имен
Stasonix
Собственно учусь здесь: 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.
m4a1fox
php -version ?????
Stasonix
Цитата (m4a1fox @ 6.12.2012 - 16:36)
php -version ?????

Что, неужели забыл версию? А в заголовке не подходит что ли?
Stasonix
Ой, изв.

Foo\bar();


Все, разобрался.
Stasonix
namespace Foo;

function bar()
{
echo 'calling bar';
}

Foo/bar();
Foo\bar();



Вот так если напр. эти вызовы в 1-м файле, то ошибки будут. Т.е. получается нельзя вызывать в пространстве имен функции что ли?

Аааа, ну естественно, просто смысл тогда обращаться через пространство имен, если функцию можно и так вызвать
Игорь_Vasinsky
может потому что пространство имён только для классов? хотя нет, там пример есть

_____________
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
Цитата (Игорь_Vasinsky @ 6.12.2012 - 16:48)
может потому что пространство имён только для классов?

Нет!
Stasonix
И в продолжение:

include("./foo.php");

use Foo;

bar();


Абзац. Call to undefined function bar() пишет. Ну хоть на use Foo; не ругается.
Quieteroks
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
нууу, в примере-то совсем иначе, там же и use без алиаса, а это чревато оказалось, в общем какая-то ненадежная статья.
Quieteroks
Stasonix
Да можно же и без псевдонима.
Последнее слово в пути будет ему псевдонимом.

Т.е.

use My\Name\Space\Foo
Foo\bar();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.