PHP 專案:PHP
設定好開發環境後,終於可以開始編寫了。就來寫物件導向的 PHP 吧。
關於方法
先簡單講講物件導向吧:我們會用抽象的 class 生產物件(object),然後在裡面呼叫無數個相似的方法(method)。因此,class 就是個生產物件的工廠;而方法則是每個透過 class 建立的物件,所內建的函式。
class Water
{
private function suger($secret)
{
return $secret;
}
public function h2o()
{
return 1;
}
public function coffine($contain)
{
return $contain;
}
}
$tea = new Water;
$beer = new Water;
$juice = new Water;
// 在這裡,三個變數($tea、$beer、$juice)都內建了 h2o 與 coffine 這兩個方法。
// 那 suger 呢?這方法有趣了:它只能在 class 裡面被呼叫,在 class 以外呼叫會出錯:
echo( $juice->suger(100) ); // Fatal error: Uncaught Error: Call to private method Water::suger()
// 善加使用的話,就能貫徹物件導向的其中一個原則:封裝(Encapsulation)。
靜態方法
class 是一個抽象的存在:在物件誕生前,你理論上沒辦法把方法叫出來。因此,像下面這麼作會出問題:
// 承上
$milk = Water->h2o(); // Deprecated: Non-static method Water::h2o() should not be called statically...
$coke = Water::coffine(0.1); // Deprecated: Non-static method Water::coffine() should not be called statically...
這樣寫的話會出現 Non-static method should not be called statically 的警告。有些還會直接壞掉,所以最好先宣告物件,再呼叫方法。
好險 PHP 7 可以寫成這樣來同時建立物件、並呼叫方法: $milk = (new Water)->h2o();
其他東西
- 如果想用相對路徑,請使用
__DIR__
關鍵字。 - 想接 JSON API 的話,請使用
file_get_contents()
方法。對了,記得要用json_decode()
方法,讓 PHP 能讀 JSON API 喔。
好,結束囉。下次有空再寫吧。雖然以後應該沒有了。
參考資料
- Error message Strict standards: Non-static method should not be called statically in php
- How to call non-static method from static method of same class?
- 一秒看破 static
- Don't call instance methods statically
- PHP - Relative paths “require”
- PHP Fatal Error Failed opening required File
- Get JSON object from URL
- PHP: file_get_contents