php面向對象編程(一)
類與對象關系:
類就像一個人類的群體 我們從類中實例化一個對象 就像是制定一個人。
面向對象程序的單位就是對象,但對象又是通過類的實例化出來的,所以我們首先要做的就是如何來聲明類, 做出來一個類很容易。
類的格式
class 類名 { }
類可以理解為一個人的群體,如果我們要把這個人介紹給別人 那麽
首先, 你會介紹這個人姓名、性別、年齡、身高、體重、電話、家庭住址等等。
然後,你要介紹這個人能做什麽, 可以開車, 會說英語, 可以使用電腦等等。
從定義的角度可以分為:
1.靜態的描述 如:人的姓名、性別、年齡、身高、體重、電話、家庭住址等等 我們將靜態的描述稱為成員屬性
我們可以用var 來定義 如 var $description ;此時我們應該註意的是聲明沒有必要賦值
2.動態描述 如:這個人可以開車, 會說英語, 可以使用電腦等等 我們將動態的描述稱為成員方法
class 人 { 成員屬性:姓名、性別、年齡、身高、體重、電話、家庭住址 成員方法:可以開車, 會說英語, 可以使用電腦 }
<?php class Person { // 下面是人的成員屬性 var $name; //人的名子 var $sex; //人的性別 var $age; //人的年齡 // 下面是人的成員方法 function say() // 這個人可以說話的方法 { echo "這個人在說話"; } function run() // 這個人可以走路的方法 { echo "這個人在走路"; } } ?>
當定義好一個類後 我們需要實例化那個類才能使用
用new的關鍵詞 $對象名稱 = new 類名稱();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php
class Person
{
//下面是人的成員屬性
var $name ; //人的名子
var $sex ; //人的性別
var $age ; //人的年齡
//下面是人的成員方法
function say() { //這個人可以說話的方法
echo "這個人在說話" ;
}
function run() { //這個人可以走路的方法
echo "這個人在走路" ;
}
}
$p1 = new Person();
$p2 = new Person();
$p3 = new Person();
?>
|
現在我們示例化類已經好了我們就要去學會如何使用類中的成員
對象->屬性 $p1->name; $p2->age; $p3->sex;
對象->方法 $p1->say(); $p2->run()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
<?php
class Person
{
// 下面是人的成員屬性
var $name ; // 人的名子
var $sex ; // 人的性別
var $age ; // 人的年齡
// 下面是人的成員方法
function say() // 這個人可以說話的方法
{
echo "這個人在說話" ;
}
function run() // 這個人可以走路的方法
{
echo "這個人在走路" ;
}
}
$p1 = new Person(); //創建實例對象$p1
$p2 = new Person(); //創建實例對象$p2
$p3 = new Person(); //創建實例對象$p3
// 下面三行是給$p1對象屬性賦值
$p1 ->name = "張三" ;
$p1 ->sex = "男" ;
$p1 ->age = 20;
// 下面三行是訪問$p1對象的屬性
echo "p1對象的名子是:" . $p1 ->name;
echo "p1對象的性別是:" . $p1 ->sex;
echo "p1對象的年齡是:" . $p1 ->age;
// 下面兩行訪問$p1對象中的方法
$p1 ->say();
$p1 ->run();
// 下面三行是給$p2對象屬性賦值
$p2 ->name = "李四" ;
$p2 ->sex = "女" ;
$p2 ->age = 30;
// 下面三行是訪問$p2對象的屬性
echo "p2對象的名子是:" . $p2 ->name;
echo "p2對象的性別是:" . $p2 ->sex;
echo "p2對象的年齡是:" . $p2 ->age;
// 下面兩行訪問$p2對象中的方法
$p2 ->say();
$p2 ->run();
// 下面三行是給$p3對象屬性賦值
$p3 ->name= "王五" ;
$p3 ->sex= "男" ;
$p3 ->age=40;
// 下面三行是訪問$p3對象的屬性
echo "p3對象的名子是:" . $p3 ->name;
echo "p3對象的性別是:" . $p3 ->sex;
echo "p3對象的年齡是:" . $p3 ->age;
// 下面兩行訪問$p3對象中的方法
$p3 ->say();
$p3 ->run();
?>
|
此時類我們已經基本可以使用了 但是我們發現還是有點不足 就是我們可以在外部進行訪問,但是不能在內部進行訪問 我們引進一個概念“this”的用法 如果可以對內部進行訪問賦值 那麽將減少我們的代碼量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<?php
class Person
{
// 下面是人的成員屬性
var $name ; //人的名子
var $sex ; //人的性別
var $age ; //人的年齡
// 下面是人的成員方法
function say() // 這個人可以說話的方法
{
echo "我的名子叫:" . $this ->name . " 性別:" . $this ->sex . " 我的年齡是:" . $this ->age;
}
function run() // 這個人可以走路的方法
{
echo "這個人在走路" ;
}
}
$p1 = new Person(); // 創建實例對象$p1
$p2 = new Person(); // 創建實例對象$p2
$p3 = new Person(); // 創建實例對象$p3
// 下面三行是給$p1對象屬性賦值
$p1 ->name = "張三" ;
$p1 ->sex = "男" ;
$p1 ->age = 20;
// 下面訪問$p1對象中的說話方法
$p1 ->say();
// 下面三行是給$p2對象屬性賦值
$p2 ->name = "李四" ;
$p2 ->sex = "女" ;
$p2 ->age = 30;
// 下面訪問$p2對象中的說話方法
$p2 ->say();
// 下面三行是給$p3對象屬性賦值
$p3 ->name = "王五" ;
$p3 ->sex = "男" ;
$p3 ->age = 40;
// 下面訪問$p3對象中的說話方法
$p3 ->say();
?>
|
分析一下
1 2 3 4 |
function say() // 這個人可以說話的方法
{
echo "我的名子叫:" . $this ->name . " 性別:" . $this ->sex . " 我的年齡是:" . $this ->age;
}
|
上面代碼中$this指的是對其進行賦值的對象。
構造方法__construct()與析構方法__destruct()
構造方法__construct():即自動使用new的方法實現對象的實例化(可以理解為為實現能在實例化對象的時候傳入參數構建一道橋梁)。理解為一個隊列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<?
// 創建一個人類
class Person
{
// 下面是人的成員屬性
var $name ; // 人的名子
var $sex ; // 人的性別
var $age ; // 人的年齡
// 定義一個構造方法參數為姓名$name、性別$sex和年齡$age
function __construct( $name , $sex , $age )
{
// 通過構造方法傳進來的$name給成員屬性$this->name賦初使值
$this ->name = $name ;
// 通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值
$this ->sex = $sex ;
// 通過構造方法傳進來的$age給成員屬性$this->age賦初使值
$this ->age = $age ;
}
// 這個人的說話方法
function say()
{
echo "我的名子叫:" . $this ->name . " 性別:" . $this ->sex . " 我的年齡是:" . $this ->age;
}
}
// 通過構造方法創建3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡
$p1 = new Person( "張三" , "男" , 20);
$p2 = new Person( "李四" , "女" , 30);
$p3 = new Person( "王五" , "男" , 40);
// 下面訪問$p1對象中的說話方法
$p1 ->say();
// 下面訪問$p2對象中的說話方法
$p2 ->say();
// 下面訪問$p3對象中的說話方法
$p3 ->say();
?>
|
輸出結果為:
我的名子叫:張三 性別:男 我的年齡是:20我的名子叫:李四 性別:女 我的年齡是:30我的名子叫:王五 性別:男 我的年齡是:40
析構方法__destruct():析構函數允許在銷毀一個類之前進行一些列的操作 一個類的析構函數必須是__destruct() 註意的是析構函數不能附帶任何的參數 理解為一個棧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?
// 創建一個人類
class Person
{
// 下面是人的成員屬性
var $name ; // 人的名子
var $sex ; // 人的性別
var $age ; // 人的年齡
// 定義一個構造方法參數為姓名$name、性別$sex和年齡$age
function __construct( $name , $sex , $age )
{
// 通過構造方法傳進來的$name給成員屬性$this->name賦初使值
$this ->name = $name ;
// 通過構造方法傳進來的$sex給成員屬性$this->sex賦初使值
$this ->sex = $sex ;
// 通過構造方法傳進來的$age給成員屬性$this->age賦初使值
$this ->age = $age ;
}
// 這個人的說話方法
function say()
{
echo "我的名子叫:" . $this ->name . " 性別:" . $this ->sex . " 我的年齡是:" . $this ->age;
}
// 這是一個析構函數,在對象銷毀前調用
function __destruct()
{
echo "再見" . $this ->name;
}
}
// 通過構造方法創建3個對象$p1、p2、$p3,分別傳入三個不同的實參為姓名、性別和年齡
$p1 = new Person( "張三" , "男" , 20);
$p2 = new Person( "李四" , "女" , 30);
$p3 = new Person( "王五" , "男" , 40);
// 下面訪問$p1對象中的說話方法
$p1 ->say();
// 下面訪問$p2對象中的說話方法
$p2 ->say();
// 下面訪問$p3對象中的說話方法
$p3 ->say();
?>
|
輸出結果為:
我的名子叫:張三 性別:男 我的年齡是:20我的名子叫:李四 性別:女 我的年齡是:30我的名子叫:王五 性別:男 我的年齡是:40
再見王五
再見李四
再見張三
php面向對象編程(一)