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 等等... , 因為這些框架都一定有用到物件導向, 而雖然你不懂物件導向但只要照著框架的教學文件做 , 還是可以做出功能的 , 我自己也是先學會使用這些框架 , 再回頭來看物件導向 , 才發現物件導向原來是這樣子呀~😂😂😂

留言

這個網誌中的熱門文章

網頁入門教材目錄

什麼是HTML?

網頁是怎麼運作的呢?