我创建了一个类。类的构造函数为类的属性赋值。
定义如下:
class myClass
{
private $_value;
function __construct ($input)
{
$this->_value = $input;
}
function echoThat ()
{
echo $this->_value;
}
}
其常规用法为:
$x = new myClass("SimpleString");
$x->echoThat();
但是我已经把类变成了Laravel中的一个门面类型的类,所以它被使用:
myClass::echoThat();
我应该如何像上面的例子一样在Laravel Facades中使用__construct()
方法?
3条答案
按热度按时间omhiaaxx1#
只有当你真的想像使用Laravel facade那样使用你的类时,你才应该创建一个Laravel facade。Laravel facade为类提供一个静态接口。
这意味着要么重写你的类,这样你就可以用其他方式传递你的字符串,比如:
当然,您也可以修改底层类,例如使用另一个方法来传递字符串:
然后叫它:
如果在解析Laravel facade访问器的任何地方示例化类,例如在服务提供程序中,则可以“静态”调用类的非静态方法:
只要使用
__callStatic
静态调用类上的方法,Laravel就会创建MyClass
的示例。或者不要使用Laravel facade,而是像您所做的那样手动示例化类:
yizd12fk2#
你首先要明白,在Laravel中,一个Facade并不是你真正的类,你必须把它看作,正如它的名字所说,你的类的前沿或正面。Facade实际上是你的类的一个服务定位器。
要使用此服务定位器,您必须创建一个服务提供程序,它将提供Facade使用的服务:
请注意,您的类是在方法
register()
中示例化的,现在可以通过IoC容器供应用程序使用,因此您可以执行以下操作:现在你也可以创建你的门面来使用它:
Facade只有一个方法,它的唯一用途是返回IoC容器中的类示例的名称。
现在,您可以打开
app/config/app.php
并添加ServiceProvider:还有实际的门面别名:
你应该很好地使用你的门面:
但请注意,在ServiceProvider中,类
__constructor
的创建方式将始终使用相同的参数进行调用,这是Facade的工作方式,但您有一些选项:使用setter为类示例中的数据设置新值。
使用Laravel自动类解析来动态地为类提供参数:
并修改ServiceProvider,以便为类提供无参数:
如果Laravel可以在应用程序的可用源代码中找到
MyFooClass
,或者它绑定到IoC容器,它将自动为您示例化MyFooClass
。请注意,所有这些都假设您不只是在构造函数中传递字符串,IoC容器的自动解析假设您的类具有其他类依赖项,并自动注入这些依赖项(依赖项注入)。
如果你真的只需要传递字符串或单个值给类的构造函数,而这些构造函数只需要执行一些计算,你并不真的需要为它们创建Facade,你只需要:
使用简单的设置器:
或者,就像你已经在做的,这是可以接受的:
您还可以使用IoC容器在其他类中示例化该类:
Laravel会自动传递类的一个示例,您可以按照需要使用它:
q9yhzks03#
我在此页面http://laravel.com/docs/eloquent中找到了一些关于Facade Lavarel FW中模型类的良好信息
我想这是关于你的问题的主要解释,在数据库中创建一个输入的方法。
下面是创建一个简单的新示例并初始化其变量的方法:
基于此,我假设在Lavarel中没有使用构造函数的明确方法。