laravel 如何调用静态函数而不示例化对象

oxcyiej7  于 2022-11-18  发布在  其他
关注(0)|答案(6)|浏览(201)

在Laravel(5.2)中有没有什么方法可以调用自定义对象中的静态和/或非静态函数,而不必在所有使用它的类中示例化引用对象?
示例:我有一个带有公共函数doBeforeTask()的类App\Helpers\Utilities.php
我在我的项目中的很多类中使用了这个方法,如果我可以只调用Utilities::doBeforeTask()Utilities->doBeforeTask()而不创建我的Utilities对象$obj = new Utilities();的示例,那就太好了

esyap4oy

esyap4oy1#

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

Utilities::doBeforeTask();

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

namespace App\Library;

class Utilities {

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

lf5gs5x22#

将方法定义为静态方法,并在任何地方调用它
让我们举一个例子

namespace App\Http\Utility;

    class ClassName{

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

指定名称空间
就像这样:

use App\Http\Utility\ClassName;

ClassName::methodName();

"别忘了跑步"

composer dump-autoload
siv3szwd

siv3szwd3#

如果它是一个不能更改为static的方法(即它是一个供应商文件),那么你可以在PHP〉= 5.4中进行更改

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

7ivaypg94#

定义静态函数

class Foo
{

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

现在调用Foo::staticFunction()

uqjltbpv

uqjltbpv5#

Laravel也有一个外观实现,这可能是TS的想法。这些外观将为您做基本上所有的事情,最有可能也解决了“供应商文件”的问题。
https://www.larashout.com/creating-custom-facades-in-laravel
基本上,你必须提供一个它的示例,并将你的外观指向它,这反过来又得到了你注册的别名。

kr98yfug

kr98yfug6#

对于动态静态调用

Utilities::anyMethod($args);

PHP程式码

<?php
namespace App\Library;

class Utilities {
  public function anyMethod() {
     // simple code
  }

  public static function __callStatic($method, $args)
  {
      $instance = static::resolveFacadeInstance(static::getFacadeAccessor());
      switch (count($args))
      {
        case 0:
            return $instance->$method();

        case 1:
            return $instance->$method($args[0]);

        case 2:
            return $instance->$method($args[0], $args[1]);

        case 3:
            return $instance->$method($args[0], $args[1], $args[2]);

        case 4:
            return $instance->$method($args[0], $args[1], $args[2], $args[3]);

        default:
            return call_user_func_array(array($instance, $method), $args);
      }
    }
  }
}

相关问题