REVISED
我有一个简单的问题,但对OOP不熟悉我不确定这是否可行。
目前我有一个类,其中一个函数接受一个参数。 实际功能的作用是无关紧要的。
<?php
class Method {
public function show($parameter){
echo $parameter;
}
}
?>
我创建这样的对象......
$this->Method = new Method();
并像这样使用它......
$this->Method->show($parameter);
所以问题是,我的功能是否可以通过简化使用的方式进行设置 此...
$this->Method($parameter);
我尝试将函数更改为__construct
并使用上面的代码行,但由于new Method()
创建时没有指定$parameter
,因此失败了。
我希望能够在调用$parameter
之后通过new Method();
。
答案 0 :(得分:2)
是的,你可以这样做。如果向类中添加__invoke()
方法,则可以像调用方法一样调用该类的实例。
class Method {
public function __invoke($param) {
echo $param;
}
}
然后你可以按照你想要的方式在课堂上使用它
$this->Method = new Method;
$this->Method('something'); // echos something
如果您仍想使用show
方法(或实际上的任何方法),您可以将其保留在那里,只需在__invoke
中调用它。
class Method {
public function show($param) {
echo $param;
}
public function __invoke($param) {
$this->show($param);
}
}
另一种可能性,因为看起来你想要能够像使用函数一样使用对象,就是定义trait并在当前具有{{1}的对象中使用它而不是使用Method
类。如果你创建了一个特征:
Method
然后在需要使用trait CanUseMethod {
public function Method ($parameter) {
echo $parameter;
}
}
的课程中,而不是
Method
你可以使用这样的特性:
$this->Method = new Method;
然后,您的class Example {
use CanUseMethod;
}
课程就可以在不创建新对象的情况下使用Example
。