PHP實踐之路(八)類與物件(1)

2021-06-15 07:31:28 字數 3139 閱讀 7170

php實踐之路(目錄索引)

類與物件的知識點較多,我們這裡將分幾篇文章來分別闡述

a、類的定義以class為關鍵字,類名可以是任何非php保留字的名字。類的實體內容定義在一對花括號內部,模型如下

class 類名
b、偽變數 $this

可以在當乙個方法在物件內部呼叫時使用。$this

是乙個到呼叫物件的引用

c、self在類內部代表類本身

d、建立乙個類的例項用new關鍵字

e、php當中物件是按引用傳遞的

f、當把乙個物件已經建立的例項賦給乙個新變數時,新變數會訪問同乙個例項,就和用該物件賦值一樣

根據以上知識點,我們做如下實驗

<?php

//換行輸出

function println($var)

//定義乙個類person

class person

public function setname($name)

public function getcategory()

}$p1 = new person(); //使用new來建立乙個物件

println($p1->getname()); //jack

$p2 = $p1; //物件賦值,$p2訪問的例項將指向$p1指向的物件

println($p2->getname()); //jack

$p3 = &$p1; //引用賦值,$p3指向$p1

println($p3->getname()); //jack

$p1->setname("lucy");

println($p1->getname()); //lucy

println($p2->getname()); //lucy

println($p3->getname()); //lucy

$p1 = null; //$p1和$p3將都為null,$p2還指向了剛開始建立的那個物件

var_dump($p1); //null

var_dump($p2);

/*object(person)[1]

private 'name' => string 'lucy' (length=4)

*/var_dump($p3); //null

println($p2->getcategory()); //chinese

//此處雖然按值傳遞,但由於是物件,所以為引用傳遞

function changename($obj)

changename($p2);

println($p2->getname()); //lily

?>

a、類的成員變數也可以叫做類的屬性、欄位和特徵等,它表示了乙個類資料有的屬性,也就是資料

b、在成員變數的前面新增關鍵字public、protected 或private來達到成員變數的訪問控制。由 public 所定義的類成員可以在任何地方被訪問;由 protected 所定義的類成員則可以被其所在類的子類和父類訪問(當然,該成員所在的類也可以訪問);而由 private 定義的類成員則只能被其所在類訪問

c、為了相容php4,php5宣告屬性依然可以直接使用關鍵字var,或者放在public, protected, orprivate之前。但是var並不是必須的。在php 5.0 到5.1.3,var會認為是廢棄的, 而且丟擲e_strict警告,但是5.1.3之後就不再認為是廢棄,也不會丟擲警告。 如果直接使用var宣告屬性,而沒有public,protected, 或 private,php 5 會認為這個屬性為public

d、在類的成員方法裡面,可以通過$this->property

這種方式來訪問類的屬性,但是要訪問類的靜態屬性裡面卻不能使用,而是使用self::$property

e、類成員都必須使用關鍵字public、protected 或 private 進行定義

f、在定義類成員方法時,不新增訪問控制修飾符時預設為public

實驗時間

<?php

//換行輸出

function println($var)

//定義乙個類person

class person

//內部獲取年齡

public function getage()

}println(person::$category); //類外部獲取類的靜態變數,輸出chinese

$p = new person(); //建立乙個物件

println($p->getcategory()); //chinese

println($p->name); //外部訪問公開變數,輸出jack

//println($p->age); //外部返給私有變數,報錯fatal error: cannot access private property person::$age

println($p->getage()); //通過公開方法getage()來獲取物件的私有屬性age,輸出10

?>

a、類常量的值將始終保持不變。在定義和使用常量的時候不需要使用$

符號,使用const關鍵字來定義類常量

b、php5.3.0之後,我們可以用乙個變數來動態呼叫類。但該變數的值不能為關鍵字self, parent 或static

實驗一下

<?php

//換行輸出

function println($var)

//定義乙個類person

class person

}println(person::class_name); //類外部訪問常量,輸出person

$p = new person();

println($p::class_name); //使用物件訪問常量,輸出person

println($p->getval()); //輸出person

$val="person";

println($val::class_name); //變數來動態呼叫類,輸出person

?>

PHP實踐之路(十)類與物件(3)

php實踐之路 目錄索引 a 在class前面加上abstract關鍵字類宣告乙個抽象類,在方法上面加上abstract關鍵字來定義抽象方法 b 抽象類不能直接被例項化,你必須先繼承該抽象類,然後再例項化子類 c 抽象類中至少要包含乙個抽象方法。如果類方法被宣告為抽象的,那麼其中就不能包括具體的功能...

C 學習(八) 類和物件(三)

include include using namespace std 系統提供的拷貝函式,只會做簡單的值拷貝 如果類中有屬性開闢到堆區,那麼在釋放的時候,由於淺拷貝問題導致堆區內容會重複釋放程式down掉 利用深拷貝 解決淺拷貝帶來的問題 class persion persion const p...

python筆記 八 類 part1

class myclass pass python中最簡單的類,pass表示什麼也不做。現在在這個類裡加乙個方法 class myclass defsayhello self print hello c myclass c.sayhello 唯一要注意的地方是sayhello方法帶了乙個引數self...