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