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