Вызов функции-члена из другой функции-члена в PHP?
Я немного смущен ситуацией, показанной в этом коде...
class DirEnt
{
public function PopulateDirectory($path)
{
/*... code ...*/
while ($file = readdir($folder))
{
is_dir($file) ? $dtype = DType::Folder : $dtype = Dtype::File;
$this->push_back(new SomeClass($file, $dtype));
}
/*... code ...*/
}
//Element inserter.
public function push_back($element)
{
//Insert the element.
}
}
почему мне нужно использовать $this->push_back(new SomeClass($file, $dtype))
или self::push_back(new SomeClass($file, $dtype))
для вызова функции-члена push_back
? Я не могу получить к нему доступ, просто делая push_back(new SomeClass($file, $dtype))
как я и ожидал. Я читаю когда использовать self over $this? но он не ответил, Зачем мне вообще нужен один из них (или если я вообще это делаю, возможно, я испортил что-то еще).
почему эта спецификация необходима, когда члены как нестатические и в одном классе? Не должны ли все функции-члены быть видимыми и известными из других функций-членов в том же классе?
PS: он отлично работает с $this->
и self::
но говорит, что функции неизвестны, когда ни один из них не присутствует на push_back
звонок.
2 ответов
Я не могу получить к нему доступ, просто делая
push_back(new SomeClass($file, $dtype))
Как я и ожидал.
таким образом, вы называете push_back()
как функция. Нет никакого способа обойти $this
(методов объекта) или self::
/static::
(для методов класса), так как это приведет к неоднозначности
просто помните: PHP не является Java;)
$this->push_back
вызовет метод как часть текущего объекта.
self::push_back
вызывает метод как статический, что означает, что вы не можете использовать $this
внутри push_back.
push_back()
сам по себе попытается вызвать функцию push-back из глобальной области, а не push_back в вашем объекте. Это не "вызов объекта", это просто вызов функции plain-jane, так же как вызов printf
или is_readable()
внутри объекта вызывает обычные основные функции PHP.