我是OOP的新手,但是我很快就到达了。
我有一个带有用于连接api的单一方法的类。我还有另一个类,其中包含使用此api的各种端点和查询的各种方法。
我希望只能调用一次第一个类,并在变量类中使用该类中的方法,而不是一遍又一遍地调用每个方法中的类。
例如:
目前我正在这样做。
class classname
{
public function name1
{
# some code
$request = new someClassName();
$var = $request->functionName();
}
public function name2
{
# some code
$request = new someClassName();
$var = $request->functionName();
}
}
我想实现以下目标:
class classname
{
public $request = new someClassName();
public function name1
{
# some code
$var = $request->functionName();
}
public function name2
{
# some code
$var = $request->functionName();
}
}
答案 0 :(得分:3)
使用$this并创建一个构造函数。
web
答案 1 :(得分:2)
更进一步,您可以将依赖项someClassName
注入您的类中,然后通过公共方法公开它。另外,请将财产设为私有,这样就无法从外部访问它。
为清楚起见,我将someClassName
重命名为Request
,并将classname
重命名为Handler
。
class Handler
{
private $_request = null;
public function __construct(Request $request)
{
$this->_request = $request;
}
public fuction handle()
{
return $this->_request->process();
}
}
// Inject the dependency into the class from the outside.
$handler = new Handler(new Request());
// Call the public method on the class to perform actions.
echo $handler->handle();
答案 2 :(得分:0)
您可以实现的另一种选择:
如果您的 someClassName 仅具有一种连接到api的方法,这意味着您对该类没有其他依赖项(注入等),则可以将该方法声明为static然后调用在您的类名中。
class someClassName
{
public static function functionName()
{
# some code
}
}
class classname
{
public function name1
{
# some code
$var = someClassName::functionName();
}
public function name2
{
# some code
$var = someClassName::functionName();
}
}
或者您也可以在下面的例子中写一个特质:
trait sometraitName
{
protected function functionName()
{
# some code
}
}
class classname
{
use sometraitName;
public function name1
{
# some code
$var = $this->functionName();
}
public function name2
{
# some code
$var = $this->functionName();
}
}