Создание нескольких экземпляров splFileObject
У меня есть класс, похожий на этот
class x {
function __construct($file){
$this->readData = new splFileObject($file);
}
function a (){
//do something with $this->readData;
}
function b(){
//do something with $this->readData;
}
}
$o = new x('example.txt');
echo $o->a(); //this works
echo $o->b(); //this does not work.
кажется, что когда-либо метод, вызываемый first, работает только тогда, когда они вызываются вместе, будет работать только первый вызванный метод. Я думаю, что проблема связана с моим непониманием того, как new
объект строится.
1 ответ
Конструкция загружается в экземпляр класса. И вы создаете его только один раз. И доступ в два раза. Есть разные действия. Если вы хотите, чтобы файл считался всегда занятым, следует создать метод, который читает этот файл, и во всех остальных триггерах этот метод.
Я проверил ваш код, и он работал нормально. Я полагаю, что это должно смотреть на журналы и видеть, появляется ли какая-либо ошибка. Если файл не существует, ваш код остановится.
Найдите эту ошибку в ваших логах apache:
PHP Fatal error: Uncaught exception 'RuntimeException' with message 'SplFileObject::__construct(example.txt): failed to open stream
Отвечая на ваш комментарий, это может быть способом:
<?php
class x {
private $defaultFile = "example.txt";
private function readDefaultFile(){
$file = $this->defaultFile;
return new splFileObject($file);
}
function a (){
$content = $this->readDefaultFile();
return $content ;
}
function b(){
$content = $this->readDefaultFile();
return $content ;
}
}
$o = new x();
echo $o->a();
echo $o->b();
Оба метода вернут объект splFile.