2015-01-15 5 views
0

У меня есть интерфейс вроде этого:PHP функции внутри класса - вызов функции внутри класса

interface General { 
    public function getFile($file); 

    public function searchFile($to_search); 
} 

У меня есть класс, например, так:

class Parent implements General { 


    public function getFile($file) { 
     $loaded = file($file); 
    } 

    public function searchFile($to_search) { 
    $contents = $this->getFile(); // doesn't work because I need the $file from get_file()! 
    // searches file 
    // returns found items as collection 
    } 
} 

Затем в коде, я могу сделать что-то вроде ....

$file = "example.txt"; 
$in = new Parent(); 
$in->getFile($file) 
$items = $in->searchFile('text to search'); 
foreach($item as $item) { 
    print $item->getStuff(); 
} 

Все примеры, которые я видел для ссылки на другую функцию внутри класса, не принимают аргумента.

Как связать файл $ с getFile ($ file), чтобы я мог загрузить файл и начать поиск? Я хочу реализовать его через интерфейс, поэтому не надо менять интерфейс.

+0

использовать недвижимость? –

+0

Вам нужно передать значение для '$ file'. Там, где это значение исходит, полностью зависит от вас. –

ответ

1

Поскольку вы уже называют getFile() из вне класса, как о загрузке его как свойство класса, так что вы можете легко получить доступ к нему в searchFile() метода:

class Parent implements General { 

    protected $loaded; 

    public function getFile($file) { 
     $this->loaded = file($file); 
    } 

    public function searchFile($to_search) { 
     $contents = $this->loaded; 
     // searches file 
     // returns found items as collection 
    } 
} 
2

Передайте файл в качестве аргумента конструктора , и сохранить его содержимое как свойство.

class Parent implements General { 
    private $file; 
    public function __construct($file) { 
     $this->file = file($file); 
    } 
    public function searchFile($to_search) { 
     $contents = $this->file; 
     // proceed 
    } 
} 

На самом деле вам не нужно делать это конструктор вещи, просто функция getFile сохранить свой результат в $this->file. Я просто думаю, что это имеет больше смысла в качестве конструктора: p

+0

Полностью согласен с помещением этого в конструктор. –

Смежные вопросы