Laravel - 如何在没有实例化对象的情况下调用静态函数

时间:2016-07-15 08:11:41

标签: php laravel oop model-view-controller web

Laravel(5.2)中是否有任何方法可以在自定义对象中调用静态和/或非静态函数,而无需在使用它的所有类中实例化引用对象?

示例:我的课程App\Helpers\Utilities.php包含公共职能doBeforeTask()

我在我的项目中的所有类中使用此方法,如果我可以在不创建我的Utilities对象{{1}的实例的情况下调用Utilities::doBeforeTask()Utilities->doBeforeTask(),那将是非常好的。 }}

5 个答案:

答案 0 :(得分:5)

将您的方法定义为静态方法。并使用以下代码在任何地方调用它:

Utilities::doBeforeTask();

文件的代码结构 App \ Helpers \ Utilities.php

namespace App\Library;

class Utilities {

 //added new user
 public static function doBeforeTask() {
  // ... you business logic.
 }
}

答案 1 :(得分:2)

将您的方法定义为静态方法。随处叫

让我们举个例子

 namespace App\Http\Utility;

    class ClassName{

        public static function methodName(){
         // ... you business logic.
        }
    }

您要使用的位置指定名称空间

像这样:

use App\Http\Utility\ClassName;

ClassName::methodName();

别忘了运行

composer dump-autoload

答案 2 :(得分:1)

如果您不能将其更改为静态方法(即,这是供应商文件),则可以在PHP> = 5.4中进行操作

$something = (new Something)->foo("bar"); 

答案 3 :(得分:0)

定义静态函数

class Foo
{

    public static function staticFunction() {
        return 'Hello World';
    }
}

现在调用Foo :: staticFunction()

答案 4 :(得分:0)

Laravel也有Facade实现,这可能是TS想到的。这些Facade基本上可以为您做所有事情,而且很可能还会解决“供应商文件”问题。

https://www.larashout.com/creating-custom-facades-in-laravel

基本上,您必须提供它的一个实例并将您的外观指向它,这反过来又是您注册的别名。一切都在上面的网址中说明。