Создание нескольких экземпляров 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.

Другие вопросы по тегам