PHP入門教學 - 物件導向是什麼 ?
類與物件
物件導向的概念 , 對新手來說可能有點太深了 , 新手可以先看看 , 等PHP較熟悉之後再回過頭來看物件導向 , 可能會比較有感覺 , 小弟不才也是寫了1-2年才對這個概念比較有感覺 , 所以新手不用太著急~
定義最基礎的類
<?php
class Cat{
public $name = 'maple';
public $age = 10;
}
$cat = new Cat;
// 物件屬性取值
$name = $cat->name;
echo $name; // 結果 : maple
// 物件屬性賦值
$cat->name = 'happy';
echo $cat->name; // 結果 : happy
//將Cat class重新給$cat值 , 所以又還原了
$cat = new Cat;
echo $cat->name; // 結果 : maple
?>
帶建構函式的類
<?php
class Cat{
public $name = 'maple';
function Name(){
return $this->name;
}
// 建構函式,可以傳入引數 , 每當使用這個class的時候, 一定會先執行這個function
function __construct($name){
echo $this->name; //結果 : maple
$this->name = $name;
}
}
$cat = new Cat('happy');
// 物件屬性取值
echo $cat->Name(); //結果 : happy
?>
命名空間 namespace 和 use
過去我們寫PHP,就知道函數名稱或是類別名稱不同重覆,如果有重覆,就不能同時include以免出現 PHP Fatal error: Cannot redeclare class xxxx in ....的錯誤。當程式規模還不大時,一切都是可以控制的,但是一旦規模長大時(共同開發或是引用他人函式庫),無可避免的同名的問題就會層出不窮,還好到了php5.3版以後,支援了命名空間,新增了use和namespace兩個操作子,讓不同的namespace的Class的名稱可以重複。
簡單來說 namespace 就像在把 class 加上書籤重新再分類一次好幫助辨別 ,且一個檔案或是一個 class 最好使用一個 namespace 就好,避免造成不易閱讀。
我們先準備三個檔案 , 下方為錯誤範例
dog.php (狗的叫聲)
<?php
class style{
function Barking()
{
echo "woof";
}
}
?>
cat.php (貓的叫聲)
<?php
class style{
function Barking()
{
echo "meow";
}
}
?>
index.php
<?php
//引入檔案
include "dog.php";
include "cat.php";
//印出叫聲
$obj = new style();
$obj->Barking();
?>
這時候會出現錯誤 : Fatal error: Cannot redeclare class style in .......
意思是說 Class名稱不能重複 , 所以我們這時候需要 namespace 來解決class重複的問題~
解決辦法增加 namespace 範例如下
dog.php (狗的叫聲)
<?php
namespace dog; //命名為dog
class style{
function Barking()
{
echo "woof";
}
}
?>
cat.php (貓的叫聲)
<?php
namespace cat; //命名為cat
class style{
function Barking()
{
echo "meow";
}
}
?>
index.php
<?php
//引入檔案
include "dog.php";
include "cat.php";
//印出叫聲
$obj = new dog\style(); //我們指定要印出dog的叫聲
$obj->Barking(); //結果 : woof
?>
每次要new這麼長的路徑也太長了吧!
我們可以用 use 來縮減程式碼 , use 運算元其實是建立命名空間的別名
use dog/style as ds; //建立dog/style的別名叫ds use dog/style; // 同上,但沒用 as,php自動會把最後一個 "/"後的字元當成是別名
index.php
<?php
use dog\style as ds;
//引入檔案
include "dog.php";
include "cat.php";
//印出叫聲
$obj = new ds();
$obj->Barking();
?>
如果一開始不熟的話 , 可以先學習一些有名的框架 , 如 : laravel、CI 等等... , 因為這些框架都一定有用到物件導向, 而雖然你不懂物件導向但只要照著框架的教學文件做 , 還是可以做出功能的 , 我自己也是先學會使用這些框架 , 再回頭來看物件導向 , 才發現物件導向原來是這樣子呀~😂😂😂
留言
張貼留言