我正在編寫一組類來處理使用ftp和ftps(而不是sftp)協議進行簡單文件上傳。PHP中的變量方法?
由於PHP用ftp和FTPS之間的唯一區別是連接功能,我認爲我可以在形式$connection_function($host);
,其中$connection_function
具有值ftp_connect()
或ftp_ssl_connect()
的使用變量函數。
我做了一個抽象類,決定使用哪個類。簡化爲清楚起見,我寫道:
abstract class uploader {
protected $connection_function;
public function __construct($protocol) {
if ($protocol == "ftp") {
$this->connection_function = "ftp_connect";
} elseif ($protocol == "sftp") {
$this->connection_function = "ftp_ssl_connect";
}
}
public function upload($host, $file, ...) {
$conn = $this->connection_function($host);
}
}
class ftp_uploader extends uploader {
parent::__construct("ftp");
}
class ftps_uploader extends uploader {
parent::__construct("ftps");
}
我得到的錯誤
PHP Fatal error: Call to undefined method ftp_uploader::connection_function()
這顯然來自 公共職能上傳($主機,$文件,...){$ 康涅狄格州= $ this-> connection_function($ host); }
所以發生,我認爲我已經寫了一個變量方法,而不是一個變量功能,這顯然是不允許的(或當作我希望它是)在PHP。
我可以做我想做的嗎?抽象類處理所有的ftp函數,我想避免在兩個類中重複代碼。
編輯現在,我已經看着它一點,我知道我可以只是把該協議決定在連接如方法本身:
public function upload($host, $file, ...) {
if ($protocol == "ftp") {
$conn = ftp_connect($host);
} elseif ($protocol == "sftp") {
$cont = ftp_ssl_connect($host);
}
}
但我仍想知道,是有辦法做我的變量方法?事實上,我仍然需要重複拋出異常拋出錯誤處理以及其他任何我想放入這些if塊的代碼。
'$ this - > {$ this-> connection_function}($ host);'是做同樣的 – AD7six 2012-03-26 21:57:10
aw的另一種方法(在這種情況下非常難看)...我認爲花括號很漂亮! – user151841 2012-03-26 21:57:47
@ AD7six正試圖找到一種方法來使用'{}';然而,他正在調用本地函數,而不是該類中的函數。 – 2012-03-26 21:59:55