❶ php 構造函數格式,具體該怎麼寫應該注意什麼呢
在PHP里,如果你沒有手寫構造函數,則php在實例化這個對象的時候,會自動為類成員以及類方法進行初始化,分配內存等工作,但是有些時候不能滿足我們的要求,比如我們要在對象實例化的時候傳遞參數,那麼就需要手動編寫構造函數了,手寫構造函數有兩種寫法,只是表現形式不同,其實本質一樣
class test
{
function __construct()
{
//your code
}
}
class test
{
function test()//如果方法名跟類名字一樣,將被認為是構造函數
{
//your code
}
}
以上為兩種基本形式
我剛才說的傳遞參數進行實例化的例子,簡單的寫一個參考
class test
{
public $test = '';
function __construct($input = '')
{
$this->test = $input;
}
function getTest()
{
return $this->test;
}
}
$a = new test('a test');
echo $a->getTest()//將輸出 a test
$b = new test();
echo $a->getTest()//沒有任何輸出(其實是有輸出,但是輸出為空)
❷ PHP 為什麼要使用命名空間,命名空間的作用
命名空間一個最明確的目的就是解決重名問題,PHP中不允許兩個函數或者類出現相同的名字,否則會產生一個致命的錯誤。這種情況下只要避免命名重復就可以解決,最常見的一種做法是約定一個前綴。
舉個栗子:項目中有兩個模塊:article和message board,它們各自有一個處理用戶留言的類Comment。之後我可能想要增加對所有用戶留言的一些信息統計功能,比如說我想得到所有留言的數量。這時候調用它們Comment提供的方法是很好的做法,但是同時引入各自的Comment類顯然是不行的,代碼會出錯,在另一個地方重寫任何一個Comment也會降低維護性。那這時只能重構類名,我約定了一個命名規則,在類名前面加上模塊名,像這樣:Article_Comment、MessageBoard_Comment
可以看到,名字變得很長,那意味著以後使用Comment的時候會寫上更多的代碼(至少字元多了)。並且,以後如果要對各個模塊增加更多的一些整合功能,或者是互相調用,發生重名的時候就需要重構名字。當然在項目開始的時候就注意到這個問題,並規定命名規則就能很好的避免這個問題。另一個解決方法可以考慮使用命名空間。
基礎
命名空間將代碼劃分出不同的空間(區域),每個空間的常量、函數、類(為了偷懶,我下邊都將它們稱為元素)的名字互不影響, 這個有點類似我們常常提到的『封裝'的概念。
創建一個命名空間需要使用namespace關鍵字,這樣:
復制代碼代碼如下:
<?php
//創建一個名為'Article'的命名空間
namespace Article;
?>
要注意的是,當前腳本文件的第一個命名空間前面不能有任何代碼,下面的寫法都是錯誤的:
復制代碼代碼如下:
//例一
//在腳本前面寫了一些邏輯代碼
<?php
$path = "/";
class Comment { }
namespace Article;
?>
//例二
//在腳本前面輸出了一些字元
<html></html>
<?php
namespace Article;
?>
為什麼要說第一個命名空間呢?因為同一腳本文件中可以創建多個命名空間。
下面我創建了兩個命名空間,順便為這兩個空間各自添加了一個Comment類元素:
復制代碼代碼如下:
<?php
//創建一個名為'Article'的命名空間
namespace Article;
//此Comment屬於Article空間的元素
class Comment { }
//創建一個名為'MessageBoard'的命名空間
namespace MessageBoard;
//此Comment屬於MessageBoard空間的元素
class Comment { }
?>
在不同空間之間不可以直接調用其它元素,需要使用命名空間的語法:
復制代碼代碼如下:
<?php
namespace Article;
class Comment { }
namespace MessageBoard;
class Comment { }
//調用當前空間(MessageBoard)的Comment類
$comment = new Comment();
//調用Article空間的Comment類
$article_comment = new \Article\Comment();
?>
可以看到,在MessageBoard空間中調用article空間里的Comment類時,使用了一種像文件路徑的語法: \空間名\元素名
除了類之外,對函數和常量的用法是一樣的,下面我為兩個空間創建了新的元素,並在MessageBoard空間中輸出了它們的值。
復制代碼代碼如下:
<?php
namespace Article;
const PATH = '/article';
function getCommentTotal() {
return 100;
}
class Comment { }
namespace MessageBoard;
const PATH = '/message_board';
function getCommentTotal() {
return 300;
}
class Comment { }
//調用當前空間的常量、函數和類
echo PATH; ///message_board
echo getCommentTotal(); //300
$comment = new Comment();
//調用Article空間的常量、函數和類
echo \Article\PATH; ///article
echo \Article\getCommentTotal(); //100
$article_comment = new \Article\Comment();
?>
然後我的確得到了Article空間的元素數據。
子空間
命名空間的調用語法像文件路徑一樣是有道理的,它允許我們自定義子空間來描述各個空間之間的關系。
❸ phpclass是什麼意思,怎麼用
class關鍵字在PHP中用於聲明類。類是面向對象編程的核心,它封裝了數據和操作這些數據的方法。在PHP中創建類時,使用"class"關鍵字開頭,後面跟類名。
類定義後,可以創建類的實例,即對象。對象是類的具體化,它包含了類定義的數據和方法。通過實例化類,可以調用類中的方法並訪問其屬性。
類的定義通常包含屬性(數據成員)和方法(函數)。屬性用於存儲對象狀態,方法用於描述對象的行為。屬性可以是私有的(僅類內部訪問)、公有的(所有位置訪問)或受保護的(類內部和繼承類訪問)。方法則提供了一種執行特定操作的方式。
面向對象編程的基本原則之一是封裝,即隱藏對象的內部細節,並只暴露必要的介面供外部使用。在類中,可以通過公共方法訪問和修改屬性,而類的內部實現細節對外部隱藏。
實例化類後,可以通過對象名調用其方法,以執行特定操作。方法調用遵循面向對象編程的規則,如鏈式調用、多態等。多態允許同一方法名在不同類中有不同的實現,提供了一種靈活的編程方式。
在PHP中使用class關鍵字聲明類後,可以創建具有特定功能的模塊化代碼,使程序更易於維護和擴展。通過類的繼承,可以實現代碼的重用,即一個類可以從另一個類派生,繼承其屬性和方法。這有助於構建復雜系統時組織和管理代碼。
總之,class關鍵字在PHP中用於聲明類,它是面向對象編程的基礎,通過封裝數據和方法,提供了更強大、更靈活的程序設計能力。在實際應用中,合理使用類可以顯著提高代碼的可讀性、可維護性和復用性。
❹ PHP中不同文件夾使用相同的命名空間,相互之間應該如何調用呢能不能舉例說明一下。
那麼在不同文件中晌襲命名相同的命名空間就表示在一個容器下...不過在不同目錄下相同的命名空間我還不是太清楚.一般都是在一個項目文件下的...我去找找有答案在添激卜加宴鉛兄
命名空間可以解決下面兩個問題:
(1)用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
(2)為很長的標識符創建一個別名,提高代碼的可讀性,減少代碼的編寫量。