2016年8月18日 星期四

php Interface 簡單了解

        在設計一個系統時,低耦合是其中一個目標,當需求出現,對之前已運行很穩定的程式碼變動越少越好,低耦合意味著能夠在這樣的前提之下,也能相對容易得去擴充新功能。

        PHP的interface是一個很不錯的低耦合考慮因素。

        情況:需要寫一個會員紅利產生判斷

        一開始先設好MemberCoin的interface,然後令大家都會用到的function,但是這裡有任何實作,感覺有點像是我來訂一個標準,每個有implements我的都統一用這個function實作吧!


interface MemberCoin
{
        public function schedule($who);
}

        接著需要編寫各種活動:


class Sales implements MemberCoin    //銷售單
{
        public function schedule($who)
        {
               // do something..
               $result = ($who=="Vip")? 300:200;
               return $result;
        }
}

class Birthday implements MemberCoin   //生日

        public function schedule($who)
        {
                 $result = ($who=="Vip")? 200:100; 
                  return $result; 
         }
}


        接著要寫個接口:


class UserController
{
        public function __construct(MemberCoin $membercoin)
        {
                $this->membercoin = $membercoin;
        }

        public function showResult($who)
        {
                echo $this->membercoin->schedule($who);
        }
}

        使用的重點就在紅字粗體的地方,這裡調動的不是任何一個特定的活動,而是我們一開始設定好的interface,所以不管我們之後怎麼變動活動的內容,接口端完全不用任何變動,因為它只負責執行而已。

        現在把他實作出來:

//  調用銷貨單class
$class_sales = new Sales;

// 讓接口端知道我們要調用銷貨單class
$class_usercontroller = new UserController($class_sales);   

// 接口端用銷貨單class執行結果
echo $class_usercontroller->showResult("Vip");  

        簡單寫就是:

echo (new UserController(new Sales))->showResult("Vip");

        結果:

300

2016年8月2日 星期二

laracast Get PHP Installed : 安裝問題

今天買了Laracast的會員,一個月九塊美金,我買單月的,買一年會划算20%。

結果在php的安裝就遇到了問題,我之前都是直接用三合一的方式安裝,MAMP之類的

要成為架構師想必分開來安裝的技能是必備的吧,於是就把包刪掉全部安裝,

用homebrew安裝完之後執行php -v竟然出現



原來是把舊版本的刪掉之後忘記設定路徑啊!


看到laracast下方有人提供解法:

PATH="/usr/local/bin:$PATH"

brew services start homebrew/php/php70 (根據你安裝的php版本)

完成!

2016年8月1日 星期一

Laravel 5.2 Basic Task List : sqlstate[Hy000] [2002] Connection refused

        一開始遇到一個問題:

git clone https://github.com/laravel/quickstart-basic quickstart
cd quickstart
composer install
php artisan migrate
官網上的Document,要執行php artisan migrate 時,卻發生了這樣的錯誤



看了一下.env(在quickstart的第一層目錄),發現原本的設定是:

DB_HOST=127.0.0.1
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

原來是官方的範例或直接使用Laravel new 的command,都假設我們在Homestead上開發Laravel,所以DB也是如此設定

我們只要改成

DB_HOST=127.0.0.1:8889      ( 根據自己的port )
DB_DATABASE= database name  (建立一個本機端的database)
DB_USERNAME=  your username
DB_PASSWORD=  your password

這樣就OK了!


來研究一下migration是什麼....