如何使用變數執行 method?
傳統我們會使用 if else
判斷,執行不同的 method,但由於 JavaScript 與 PHP 動態語言的特性,我們可以將要執行的 method 名稱以變數表示,直接以該變數執行 method。
Version
ECMAScript 5
PHP 7.0
JavaScript
if else
傳統若要根據不同的 property 值,執行不同 method,我們會使用 if else
方式 :1 1GitHub Commit : JavaScript : 傳統使用 if else 切換 method
1 | function User(showed) { |
第 4 行1
2
3
4
5
6
7this.toggleShow = function() {
if (this.showed) {
this.show();
} else {
this.hide();
}
};
使用 if else
去判斷 property 值,執行不同 method。
Variable
若將 method 名稱使用變數表示,則不需使用 if else
判斷 :2 2GitHub Commit : JavaScript : 動態使用變數切換 method
1 | function User(showed) { |
第 4 行1
2
3
4this.toggleShow = function() {
var methodName = (this.showed) ? 'show' : 'hide';
this[methodName]();
};
判斷 this.showed
,並將要執行的 method 名稱存入 methodName
變數。
在 JavaScript,若要執行物件的 method,有以下3種方式 :
- object.method()
- object[‘method’] () : 其中 ‘method’ 是字串。
- object[method] () : 其中 method 是變數。
因為第 3 種方式,我們可以將 method 名稱以變數方式傳入 []
。
PHP
PHP 也可以達到類似 JavaScript 的功能。
if else
傳統若要根據不同的 field 值,執行不同 method,我們會使用 if else
方式 :3 3GitHub Commit : PHP : 傳統使用 if else 切換 method
1 | class User |
第 10 行1
2
3
4
5
6
7
8public function toggleShow()
{
if ($this->showed) {
$$this->show();
} else {
$this->hide();
}
}
使用 if else
去判斷 field 值,執行不同 method。
Variable
若將 method 名稱使用變數表示,則不需使用 if else
判斷 :4 4GitHub Commit : PHP : 動態使用變數切換 method
1 | class User |
第 10 行1
2
3
4
5public function toggleShow()
{
$method = ($this->showed) ? 'show' : 'hide';
$this->$method();
}
判斷 $this->showed
,並將要執行的 method 名稱存入 $method
變數。
在 PHP,允許我們在 ->
之後直接加上變數與()
,代表要執行的 method。
Conclusion
- JavaScript 與 PHP 都允許我們將欲執行的 method 名稱以變數表示。
- 因為 method 名稱是字串,所以我們可以將 method 名稱存在設定檔內,如
config/app.php
,將來若因為需求改變,須改變執行的 method 時,只需修改設定檔即可,並透過config::get()
讀取 method 名稱,原來程式碼完全不用修改,達到開放封閉原則的要求。
Sample Code
完整的範例可以在我的 GitHub 上找到。