Laravel(5.2)中是否有任何方法可以在自定义对象中调用静态和非静态函数,而无需在所有使用的类中实例化引用对象?
示例:我有一个具有公共功能的课程
App\Helpers\Utilities.php
doBeforeTask()
我在项目中的很多类中使用此方法,如果我可以调用
Utilities::doBeforeTask()
或 Utilities->doBeforeTask()
而无需创建我的 Utilities 对象的实例 $obj = new Utilities();
,那就太好了
将您的方法定义为静态方法。并使用以下代码在任何地方调用它:
Utilities::doBeforeTask();
文件代码结构App\Helpers\Utilities.php
namespace App\Library;
class Utilities {
//added new user
public static function doBeforeTask() {
// ... you business logic.
}
}
将您的方法定义为静态方法。并在任何地方调用它
举个例子吧
namespace App\Http\Utility;
class ClassName{
public static function methodName(){
// ... you business logic.
}
}
您要使用的地方指定命名空间
像这样:
use App\Http\Utility\ClassName;
ClassName::methodName();
别忘了奔跑
composer dump-autoload
如果这是一个无法更改为静态的方法(即它是供应商文件),那么您可以在 PHP >= 5.4 中执行此操作
$something = (new Something)->foo("bar");
定义静态函数
class Foo
{
public static function staticFunction() {
return 'Hello World';
}
}
现在调用 Foo::staticFunction()
Laravel 还有一个 Facade 实现,这可能就是 TS 的想法。这些 Facade 基本上会为您做所有事情,并且很可能还解决“供应商文件”问题。
https://www.larashout.com/creating-custom-facades-in-laravel
基本上你必须提供它的一个实例并将你的外观指向它,这反过来又得到你注册的别名。一切都在上面的网址中进行了解释。
对于动态静态调用
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);
}
}
}
}