另外两个类似的问题要求属性不能是私有的(类继承中的未定义属性?)和对父构造函数的调用(从父类访问属性时未定义属性),这些不是我的情况的问题。我有一个继承的类,它是 Object 实例,但我正在调用一个由父级提供的函数,该函数访问它自己的受保护属性。在一个对象中,代码实际上有效,除非我进行单独的函数调用(请参见下面的代码),在这种情况下我会收到此错误,在另一个类中,即使没有额外的行来强制出现问题,我也会在运行时收到错误(sendExport()错误嵌入到返回的 Excel 中,该 Excel 已损坏)。我看不到我的子类之间有任何区别,所以我不知道为什么行为不同,即使其中一个可以满足我的需要,但它可能生成错误的事实让我感到紧张,因此任何有关可能的问题/修复的指示会很好。错误是:Undefined property: App\Helpers\Exports\StudyExport::$spreadsheet at ExcelReport.php:20Line 20 is: if($this->spreadsheet instanceof Spreadsheet){这是父类 ExcelReport.php,这sendExport()是要查看的函数,它调用getExcel(),您会注意到不需要调用构造函数:<?phpnamespace App\Helpers;use PhpOffice\PhpSpreadsheet\Spreadsheet;use PhpOffice\PhpSpreadsheet\Writer\Xlsx;use Illuminate\Support\Facades\Auth;class ExcelReport { protected $cellRow=0; protected $count=0; protected $excelSec=1/24/60/60; protected $spreadsheet=null; public function checkExcel(){ return $this->spreadsheet instanceof Spreadsheet; } public function getExcel($tab=0){ if($this->spreadsheet instanceof Spreadsheet){ if($tab>=$this->spreadsheet->getSheetCount()) $tab=0; $this->spreadsheet->setActiveSheetIndex($tab); $writer=new Xlsx($this->spreadsheet); ob_start(); $writer->save('php://output'); $this->spreadsheet->disconnectWorksheets(); unset($this->spreadsheet); return ob_get_contents(); }else{ return $this->spreadsheet; } } public function sendExport($title,$tab=0){ $filename=$this->filename($title,Auth::user()->dateFormat()).'.xlsx'; // This line is not actually needed, without it, the code works (in one child but not in // another), with it the call to getExcel() gives the error $this->getExcel($tab); // /////
1 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
问题是这一行:
unset($this->spreadsheet);
这应该是:
$this->spreadsheet = null;
这并不能解决我所有的问题,但现在给了我一致的行为。我的新 Child 类仍然给我一个损坏的 Excel 文件,但这可能是由于该子类的代码中存在一些问题,因为它现在始终适用于所有其他类。
- 1 回答
- 0 关注
- 118 浏览
添加回答
举报
0/150
提交
取消