Вызов функции-члена из другой функции-члена в 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.