PHP實踐之路(八)類與物件(1)
類與物件(1)
1、概述
a、類的定義以class為關鍵字,類名可以是任何非PHP保留字的名字。類的實體內容定義在一對花括號內部,模型如下
class 類名{
statement...
}
b、偽變數 $this 可以在當一個方法在物件內部呼叫時使用。$this 是一個到呼叫物件的引用
c、self在類內部代表類本身
d、建立一個類的例項用new關鍵字
e、PHP當中物件是按引用傳遞的
f、當把一個物件已經建立的例項賦給一個新變數時,新變數會訪問同一個例項,就和用該物件賦值一樣
根據以上知識點,我們做如下實驗
<?php
//換行輸出
function println($var){
echo $var;
echo "<br />";
}
//定義一個類Person
class Person{
private $name = "jack";
static $category="chinese";
public function getName(){
return $this->name; //$this為變數的使用
}
public function setName($name){
$this->name=$name; //這裡如果用$name = $name;的話將不會對成員變數$name有任何的影響
}
public function getCategory(){
return self::$category; //訪問靜態變數,這裡和使用Person::$category是一樣的結果,但在類內部最好使用self,因為當類名發生變化時,用self就不用改程式碼了
}
}
$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){
$obj->setName("lily"); //將改變物件的$name
}
changeName($p2);
println($p2->getName()); //lily
?>
2、成員變數
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){
echo $var;
echo "<br />";
}
//定義一個類Person
class Person{
static $category = "chinese"; //類別,靜態變數
private $age = 10; //年齡,私有變數
public $name = "jack"; //年齡,公開變數
var $work = ""; //工作,用var申明的變數為public
//內部獲取類別
public function getCategory(){
return self::$category; //此處若用$this->category將報錯
}
//內部獲取年齡
public function getAge(){
return $this->age;
}
}
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
?>
3、類常量
a、類常量的值將始終保持不變。在定義和使用常量的時候不需要使用$符號,使用const關鍵字來定義類常量
b、PHP5.3.0之後,我們可以用一個變數來動態呼叫類。但該變數的值不能為關鍵字self, parent 或static
實驗一下
<?php
//換行輸出
function println($var){
echo $var;
echo "<br />";
}
//定義一個類Person
class Person{
const CLASS_NAME="Person"; //定義一個類常量
function getVal(){
return self::CLASS_NAME; //類內部訪問常量,此處也可以用$this::CLASS_NAME
}
}
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物件
- PHP實踐之路(九)類與物件(2)PHP物件
- 深入PHP物件導向、模式與實踐PHP物件模式
- PHP實踐之路(七)PHP函式PHP函式
- php.類與物件PHP物件
- PHP實踐之路(目錄索引)PHP索引
- 第八章類與物件物件
- PHP 物件導向 (八)類的自動載入PHP物件
- PHP實踐之路(六)控制結構PHP
- PHP實踐之路(三)PHP初探資料型別PHP資料型別
- PHP實踐之路(四)PHP中常量和變數PHP變數
- PHP 手冊 (類與物件) 學習筆記八:範圍解析操作符 ( :: )PHP物件筆記
- 實驗2 類與物件物件
- PHP實踐之路(二)apache虛擬主機配置PHPApache
- 1、我的PHP之路PHP
- PHP 函式庫精講之類與物件PHP函式物件
- PHP 無限級分類最佳實踐PHP
- PHP 手冊 (類與物件) 學習筆記三:類常量PHP物件筆記
- PHP 手冊 (類與物件) 學習筆記十:抽象類PHP物件筆記抽象
- 【第八天】Python的類與物件.屬性Python物件
- PHP 手冊 (類與物件) 學習筆記七:物件繼承PHP物件筆記繼承
- PHP 物件導向 final類與final方法PHP物件
- JavaScript 建立物件模式與最佳實踐JavaScript物件模式
- 物件與類物件
- 類與物件物件
- ⦁ 類與物件物件
- 測試與流量博弈的實踐之路 - 王勝
- PHP 與 UTF-8 的最佳實踐PHP
- PHP 與 UTF-8的最佳實踐PHP
- 類與物件3物件
- OC:類與物件☀️物件
- Swift:類與物件Swift物件
- PHP 物件導向 (十一)反射類PHP物件反射
- delphi的物件導向之路1 (轉)物件
- PHP 手冊 (類與物件) 學習筆記二:屬性PHP物件筆記
- JavaScript 建立物件: 方法一覽與最佳實踐JavaScript物件
- Java物件導向——類與物件Java物件
- PHP 手冊 (類與物件) 學習筆記四:類的自動載入PHP物件筆記