为了账号安全,请及时绑定邮箱和手机立即绑定

当父类中存在属性时,Laravel 出现未定义属性错误

当父类中存在属性时,Laravel 出现未定义属性错误

PHP
守着星空守着你 2023-08-19 16:47:23
另外两个类似的问题要求属性不能是私有的(类继承中的未定义属性?)和对父构造函数的调用(从父类访问属性时未定义属性),这些不是我的情况的问题。我有一个继承的类,它是 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 文件,但这可能是由于该子类的代码中存在一些问题,因为它现在始终适用于所有其他类。


查看完整回答
反对 回复 2023-08-19
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信