- /* 類的聲明
- * 1.你要開(kāi)發(fā)的是什么,確定寫(xiě)什么類
- * 2.類中的成員一定要屬于這個(gè)類
- * [修飾類的關(guān)鍵字] class 類名{
- * 成員屬性:
- * 成員方法:
- * }
- * 3.在類中聲明成員屬性時(shí),前面必須有修飾詞,當(dāng)不確定使用哪個(gè)詞時(shí),使用var或public
- * 一個(gè)文件只保存一個(gè)類,文件名中包含類名,文件:類名.class.php
- * 類名的寫(xiě)法:
- * 變量:aaaBbbCcc
- * 函數(shù):aaaBbbCcc
- * 常量:AAABBBCCC
- * 類名:AaaBbbCcc
- * 4.類中的成員屬性,如果創(chuàng)建多個(gè)對(duì)象時(shí),每個(gè)對(duì)象有不同的屬性值時(shí),不要直接給初值,在創(chuàng)建好對(duì)象之后再給值
- *
- *
- * 通過(guò)類來(lái)實(shí)例化對(duì)象
- * 1.使用的是new新建一個(gè)對(duì)象,加上類名,就是創(chuàng)建哪個(gè)類的對(duì)象
- * $對(duì)象引用=new 類名;
- * 2.只要有一個(gè)new 關(guān)鍵字就是創(chuàng)建一個(gè)對(duì)象,創(chuàng)建一個(gè)對(duì)象就是在內(nèi)存中分配了一個(gè)空間
- *
- * 只有對(duì)象才在內(nèi)存有存儲(chǔ)空間
- *
- * 對(duì)象的作用
- *
- * 對(duì)象在內(nèi)存中的分配
- *
- * 對(duì)象的使用
- * 對(duì)象中的成員必須通過(guò)對(duì)象的引用來(lái)訪問(wèn)
- * 對(duì)象->成員
- *
- * 對(duì)象->成員屬性
- * 對(duì)象->成員方法
- *
- *
- *
- */
- -<?php
- class Something {
- // 在OOP類中,通常第一個(gè)字符為大寫(xiě)
- var $x;
- function setX($v) {
- // 方法開(kāi)始為小寫(xiě)單詞,然后使用大寫(xiě)字母來(lái)分隔單詞,例如getValueOfArea()
- $this->x=$v;
- }
- function getX() {
- return $this->x;
- }
- }
- ?>-
當(dāng)然你可以按自已的喜好進(jìn)行定義,但最好保持一種標(biāo)準(zhǔn),這樣會(huì)更有效,數(shù)據(jù)成員在類中使用"var"聲明來(lái)定義,在給數(shù)據(jù)成員賦值之前,它們是沒(méi)有類型的,一個(gè)數(shù)據(jù)成員可 以是一個(gè)整數(shù),一個(gè)數(shù)組,一個(gè)相關(guān)數(shù)組(associative array)或者是一個(gè)對(duì)象.
方法在類中被定義成函數(shù)形式,在方法中訪問(wèn)類成員變量時(shí),你應(yīng)該使用$this->name,否則對(duì)一個(gè)方法來(lái)說(shuō),它只能是局部變量.
使用new操作符來(lái)創(chuàng)建一個(gè)對(duì)象:$obj=new Something;
然后你可以使用成員函數(shù)通過(guò):
- $obj->setX(5);
- $see=$obj->getX();
在這個(gè)例子中,setX成員函數(shù)將5賦值給對(duì)象的成員變量x(不是類的),然后getX返回它的值5.
你可以象:$obj->x=6那樣通過(guò)類引用方式來(lái)存取數(shù)據(jù)成員,這不是一個(gè)很好的OOP習(xí)慣,我強(qiáng)烈建議通過(guò)方法來(lái)存取成員變量,如果你把成員變量看成是不可處理的,并且只通過(guò)對(duì)象句柄來(lái)使用方法,你將是一個(gè)好的OOP程序員,不幸的是,PHP不支持聲明私有成員變量,所以不良代碼在PHP中也是允許的.
繼承在PHP中很容易實(shí)現(xiàn),只要使用extend關(guān)鍵字,代碼如下:
- <?php
- class Another extends Something {
- var $y;
- function setY($v) {
- $this->y=$v;
- }
- function getY() {
- return $this->y;
- }
- }
- ?>
- //類的聲明(電話類)
- class Phone{
- //聲明屬性
- var $pinPai;
- var $color;
- var $batteryCapacity;
- var $screenSize;
- //成員方法
- function call(){
- }
- function message(){
- }
- function playMusic(){
- }
- function photo(){
- }
- }
- //類的實(shí)例化
- <?php
- class Something {
- var $x;
- function Something($y) {
- $this->x=$y;
- }
- function setX($v) {
- $this->x=$v;
- }
- function getX() {
- return $this->x;
- }
- }
- ?>
所以你可以創(chuàng)建一個(gè)對(duì)象,通過(guò):$obj=new Something(6); 構(gòu)造函數(shù)會(huì)自動(dòng)地把6賦值給數(shù)據(jù)變量x,構(gòu)造函數(shù)和方法都是普通的PHP函數(shù),所以你可以使用缺省參數(shù).
function Something($x="3",$y="5")
接著:
- $obj=new Something(); // x=3 and y=5
- $obj=new Something(8); // x=8 and y=5
- $obj=new Something(8,9); // x=8 and y=9
缺省參數(shù)使用C++的方式,所以你不能忽略Y的值,而給X一個(gè)缺省參數(shù),參數(shù)是從左到右賦值的,如果傳入的參數(shù)少于要求的參數(shù)時(shí),其作的將使用缺省參數(shù).
當(dāng)一個(gè)派生類的對(duì)象被創(chuàng)建時(shí),只有它的構(gòu)造函數(shù)被調(diào)用,父類的構(gòu)造函數(shù)沒(méi)被調(diào)用,如果你想調(diào)用基類的構(gòu)造函數(shù),你必須要在派生類的構(gòu)造函數(shù)中顯示調(diào)用,可以這樣做是因?yàn)樵谂缮愔兴懈割惖姆椒ǘ际强捎玫?
- <?php
- function Another() {
- $this->y=5;
- $this->Something();
- //顯示調(diào)用基類構(gòu)造函數(shù)
- }
- ?>
- class Person{
- var $name;
- var $age;
- var $sex;
- function say(){
- }
- function eat(){
- }
- function run(){
- }
- }
- //實(shí)例化
- $p1=new Person;
- $p2=new Person;
- $p3=new Person;
- <?php
- $obj=new Classfoo();
- $str=serialize($obj);
- //保存$str到磁盤上
- //幾個(gè)月以后
- //從磁盤中裝入str
- $obj2=unserialize($str)
- ?>
你恢復(fù)了成員數(shù)據(jù),但是不包括方法,根據(jù)文檔所說(shuō),這導(dǎo)致了只能通過(guò)類似于使用$obj2->x來(lái)存取成員變量,你沒(méi)有別的方法的唯一辦法,所以不要在家里試它.
- //訪問(wèn)對(duì)象的成員
- $p1->name="zhangsan";
- echo $p1->name;
新聞熱點(diǎn)
疑難解答