创建splFileObject的多个实例

时间:2014-01-10 00:05:38

标签: php oop 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. 

似乎哪个方法只调用第一个只能工作,如果它们被一起调用,只有被调用的第一个方法才有效。我认为这个问题与我对new对象的构造方式缺乏了解有关。

1 个答案:

答案 0 :(得分:0)

构造被加载到类的实例中。而且你只需要实例化一次。并访问两次。是不同的行动。如果要读取文件总是被读取,应该创建一个读取此文件的方法,并在所有其他方法中触发此方法。

我测试了你的代码并且它正常工作。我相信它应该查看日志并查看是否出现任何错误。如果文件不存在,您的代码将停止 在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。