📌  相关文章
📜  不应静态调用非静态方法 Maatwebsite\Excel\Excel::import() (1)

📅  最后修改于: 2023-12-03 14:48:50.768000             🧑  作者: Mango

不应静态调用非静态方法 Maatwebsite\Excel\Excel::import()

在PHP中,当我们需要使用一个类的方法时,通常情况下我们需要先实例化该类对象才能调用它的方法。但是,有时候我们也可以用静态方法进行调用。

然而,当我们调用非静态方法时,就不能使用静态调用的方式,并且系统会提示如上所示的错误信息。

原因分析

这个错误一般出现在我们试图使用Excel类提供的import方法时。这个方法用于导入Excel文件,并将其转换为PHP数组或集合。因此,我们可能倾向于使用静态调用来执行这个操作,例如:

use Maatwebsite\Excel\Excel;

$data = Excel::import($filename);

但是,这种方式是错误的,因为Excel类中的import方法并不是静态的,而是实例方法。

因此,为了正确地调用import方法,我们应该先实例化一个Excel对象,然后再调用它的import方法,例如:

use Maatwebsite\Excel\Excel;

$reader = new Excel();
$data = $reader->import($filename);
解决方法

如果我们确实需要使用静态方式调用Maatwebsite\Excel\Excel::import()方法,我们可以使用静态代理来实现。我们可以编写一个代理类,它只包含一个静态方法,可以接受我们传递的参数并正确调用Excel对象的import方法。例如:

namespace App\Excel;

use Maatwebsite\Excel\Excel;

class ExcelFacade
{
    public static function import($filename)
    {
        $reader = new Excel();
        return $reader->import($filename);
    }
}

然后我们可以使用以下代码来调用我们的代理类的静态方法:

use App\Excel\ExcelFacade;

$data = ExcelFacade::import($filename);

这样,我们就能够在不实例化Excel对象的情况下,正确地调用其import方法。

结论

当需要调用类中的非静态方法时,一定不能使用静态方法进行调用,否则就会出现上述错误。正确的解决方法是先实例化该类对象,然后再调用相应的方法。

如果确实需要使用静态方法进行调用,我们可以通过编写一个代理类来实现。