Big*_*ies 1 php laravel laravel-5
我试图弄清楚如何根据用户点击表单来调用函数.但我不确定我是否正确行事.
我有很多课程,让我们说3用于连接网站的不同方式,用户点击他们想要的那个.
我在我的代码中将其命名为"service".
我不想运行一大堆IF语句,我宁愿尝试动态构建调用.
我目前所拥有的内容如下
$ftp_backup = new FTPBackup;
$sftp_backup = new SFTPBackup;
$ssh_backup = new SSHBackup;
$service = $request->input('service') . '_backup';
$service->testConn($request);
Run Code Online (Sandbox Code Playgroud)
我得到以下错误
Call to a member function testConn() on string
Run Code Online (Sandbox Code Playgroud)
我不确定我这样做是对的.
任何帮助将不胜感激.
谢谢
首先,$ service是一个字符串,你不能在其上调用方法,因为它不是一个对象(类实例).
我认为这是一个很好的例子,您可以使用战略模式,如下所示:
class BackupStrategy {
private $strategy = null;
public function __construct($service_name)
{
switch ($service_name) {
case "ftp":
$this->strategy = new FTPBackup();
break;
case "sftp":
$this->strategy = new SFTPBackup();
break;
case "ssh":
$this->strategy = new SSHBackup();
break;
}
}
public function testConn()
{
return $this->strategy->testConn();
}
}
Run Code Online (Sandbox Code Playgroud)
然后就在你想要调用它的地方你可以通过以下方式调用它:
$service = new BackupStrategy($request->input('service'));
$service->testConn($request);
Run Code Online (Sandbox Code Playgroud)
我建议您阅读OOP中的设计模式 - 它将在未来为您提供很多帮助.