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