Почему const не определен в статической функции? - PullRequest
2 голосов
/ 19 октября 2010

Почему постоянная name не распознается в статической функции f2()?

class Foo {
    protected static function f1($s) {
        echo "doing $s";
    }
}
class Bar extends Foo {
    const name = 'leo';
    public static function f2() {
        Foo::f1(name);
    }
}
$bar = new Bar();
$bar->f2();

Я получаю следующую ошибку:

Notice: Use of undefined constant name - assumed 'name' in ...

Что я делаю не так?

1 Ответ

13 голосов
/ 19 октября 2010

Довольно просто, константа name не определена.То, что вы определили, является константой класса .Вы можете получить к нему доступ через:

Bar::name

или из класса Bar или любого из его потомков

self::name

или из класса Bar или любого из егопотомки только с 5.3+:

static::name

Итак, измените вызов на:

public static function f2() {
    Foo::f1(self::name);
}

И это должно сделать это для вас ...

О, иеще одно примечание.Как правило, соглашение об именах таково, что все константы должны быть в верхнем регистре.Таким образом, оно должно быть const NAME = 'leo';, а ссылка на него должна быть self::NAME.У вас нет , чтобы сделать это таким образом, но я думаю, что это помогает читабельности ...

...