我有一个与此类似的课程
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
对象的构造方式缺乏了解有关。
答案 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。