另外两个类似的问题要求属性不能是私有的(类继承中的未定义属性?)和对父构造函数的调用(从父类访问属性时未定义属性),这些不是我的情况的问题。
我有一个继承的类,它是 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()
,您会注意到不需要调用构造函数:
<?php
namespace 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);
// /////
慕婉清6462132