php成員裡面有3種:1、成員屬性(類別屬性),也就是定義在類別中的變量,用於儲存類別中的資料;2、成員方法,即定義在類別中的函數,提供給物件解決事件;3、類別常數,是在類別中定義的常數,使用const關鍵字定義。
本教學操作環境:windows7系統、PHP8版、DELL G3電腦
#類別成員指定義在類別中的一系列數據,他們是直接依賴類別的一級成員。類別成員包括:成員屬性、成員方法、類別常數。
成員屬性(類別屬性):即定義在類別中的變量,用於儲存類別中的資料
成員方法:即定義在類別中的函數,提供給物件解決事件。
類別常數:在類別中定義的常數,使用const關鍵字定義。
屬性和方法在存取時需要使用存取限定修飾符修飾。
語法:
class 类名{ public $成员属性名[=成员属性值]; //成员属性可以只定义而不赋值,放在之后赋值。 [public] function 成员方法名(){ ... } const 常量名=值; }
類別的成員屬性可以只定義而不賦值,在之後的邏輯運算中根據情況賦值,但是必須有存取限定修飾符修飾,成員方法的存取限定修飾符可以省略,省略後預設就是public,關於限定修飾符會在後面詳解。
實作類別成員的步驟同樣需要進行業務邏輯分析,大致的步驟是:
宣告類別結構
分析類別是否需要儲存資料來決定是否定義成員屬性或定義多少成員屬性
分析類是否要進行某些操作來決定是否要定義成員方法。
分析是否需要定義常數
物件實例化
透過物件呼叫類別成員
範例:分析新聞投稿的類別的簡單範例
實作新聞投稿,首先要宣告類別結構:
class devote{ }
然後分析是否需要儲存數據,很明顯,投稿新聞肯定要儲存數據,首先要儲存新聞標題、新聞內容,然後投稿人的信息,包括暱稱,郵箱,手機號等等。
這些資料我們透過成員屬性儲存:
class devote{ public $nickname="投稿人"; public $title="新闻标题"; public $content="投稿内容"; public $email="邮箱"; public $phone="手机号"; }
然後分析是否需要執行操作,投稿新聞首先要對新聞內容進行過濾,屏蔽不當詞語,然後提交到資料庫中保存草稿,等待審核。
class devote{ public $nickname="投稿人"; public $content="投稿内容"; public $email="邮箱"; public $phone="手机号"; function clear($content){ //过滤新闻内容 } function input(){ //提交到数据库 } }
需不需要類別常數呢?暫且是不需要的,那接下來就是實例化類,然後透過物件呼叫成員實作功能了。
$devote=new devote(); //实例化对象 $devote->nickname="小杜"; $devote->title="一件大事"; $devote->content="我手机没电了"; $devote->email="2811051813@qq.com"; $devote->phone="就不告诉你"; $devote->clear($devote->content); $devote->input(); //通过调用成员实现业务
關於類別成員的調用,我們使用的是->鏈接,如上面的例子所示,調用類別屬性的語法是:
##$對象->屬性名;
請注意:呼叫屬性名不需要加$符,在呼叫時,他們是一體的。但在定義屬性時,必須有$符表示定義變數。 調用屬性會得到當前屬性的值,對其賦值就會改變他的值,如上,如果是直接調用title屬性,得到的值是“新聞標題”,如果再對其賦值,此時title的值就是一件大事,如果對屬性重新賦值了,在接下來使用該屬性所得到的值都是後面賦值的內容,因為類別屬性其實也就是一個變數。 重新賦值等同於:$devote->title="一件大事"; //等同于: public $title="一件大事";呼叫類別方法:
#$物件->方法名稱(參數)
調用類別常數是靜態調用,會在後面詳解。 可以透過列印物件來直觀的展示上面的內容:class devote{ public $nickname="投稿人"; public $content="投稿内容"; public $email="邮箱"; public $phone="手机号"; function clear($content){ //过滤新闻内容 } function input(){ //提交到数据库 } } $devote=new devote(); var_dump($devote); //object(devote)#1 (4) { ["nickname"]=> string(9) "投稿人" ["content"]=> string(12) "投稿内容" ["email"]=> string(6) "邮箱" ["phone"]=> string(9) "手机号" }自己測試一下,可以看到成員屬性的值是預設的,如果透過物件給成員屬性重新賦值,然後再列印物件:
$devote->nickname="小杜"; $devote->title="一件大事"; $devote->content="我手机没电了"; $devote->email="2811051813@qq.com"; $devote->phone="就不告诉你"; $devote->clear($devote->content); $devote->input(); var_dump($devote);可以發現類別屬性的值被改變了。
$devote->id=1; /* 打印结果: object(devote)#1 (6) { ["nickname"]=> string(6) "小杜" ["content"]=> string(18) "我手机没电了" ["email"]=> string(17) "2811051813@qq.com" ["phone"]=> string(15) "就不告诉你" ["title"]=> string(12) "一件大事" ["id"]=> int(1) } */執行上面的操作後會在類別中新增一個屬性id,並賦值為1,這個值之後也可以透過物件直接存取:
echo $devote->id; //输出1直接呼叫一個不存在的屬性也不會報錯,但他的值是NULL。
var_dump($devote->ids); //NULL刪除類別屬性使用unset方法:
unset($devote->id); var_dump($devote->id); //NULL透過物件操作的類別屬性只在目前物件下生效:
$devote->age=18; $dv=new devote(); var_dump($dv); //object(devote)#2 (4) { ["nickname"]=> string(9) "投稿人" ["content"]=> string(12) "投稿内容" ["email"]=> string(6) "邮箱" ["phone"]=> string(9) "手机号" }方法操作只有呼叫一種操作,即只可以透過物件呼叫類別的成員方法:
$devote->input();注意:類別成員在類別中可以無限定義,但是類別中只能包含類別屬性、類別方法、類別常數,其他的語法都不可以寫在類別中。
class Test{ echo 1234; var_dump("错误"); if($a==1){ echo "True"; } } //syntax error, unexpected 'echo' (T_ECHO), expecting function (T_FUNCTION) or const (T_CONST)推薦學習:《
PHP影片教學》
以上是php成員裡面有幾種的詳細內容。更多資訊請關注PHP中文網其他相關文章!