51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

简单介绍PHP面向对象

面向对象编程的三特点: 封装性,继承性(PHP支持单继承),多态性
PHP的一个类必须在一段代码段中,即一个"<?php ...... ?>"

class PhpClass{
    public $name;
    public function toString(){
        return "PhpClass";
    }
}

定义成员方法: [关键词] function 方法名(){...}

访问成员方法: 对象名->成员方法

定义成员变量: [关键字] 成员变量名

访问成员变量: 对象名->成员变量

关键字可以使用 public、private、protected、static和final中的任意一个

定义类常量: const 常量名
访问类常量: 类名::常量名

<?phclass PhpClass{  
    public $name;  
    const PI = 3.1415926;   // 不能有修饰词  
    public function toString(){  
        return "PhpClass";  
    }  
    public function printPI(){  
        echo PhpClass::PI.'<br/>';  // 直接通过类名访问  
    }  
    public function printName(){  
        echo $this->name;   // 注意此处的写法  
    }  
}  
$lycClass = new PhpClass();  
echo $lycClass::PI.'<br/>'; // 通过对象访问  
echo PhpClass::PI.'<br/>';  
echo $lycClass->toString().'<br/>';  
$lycClass->name = "Lyc";  
$lycClass->printName();  

构造方法和析构方法:

构造方法: 不写会默认一个

void __construct([mixed args [,...]]) 下划线为两个

析构方法:

void __destruct(void) 下划线为两个

php使用垃圾回收机制,不用 unset 函数析构方法也会自动被调用

class PhpClass{  
    public $name;  
    //public function __construct(){} PHP不支持 C++、java 形式上的方法重载  
  
    public function __construct($name){  
        $this->name = $name;  
    }  
    public function __destruct(){  
        echo '析构一下...';  
    }  
}  
$lycClass = new PhpClass('lyc');  
echo $lycClass->name;  
//unset($lycClass); 不写也会调用 __destruct() 

继承和多态

继承: 在PHP中子类可以继承父类的所有public和protected修饰的成员变量和方法,包括构造方法。

声明继承的格式:

class subClass extendes superClass{

......

}

多态:(覆盖和重载两种,覆盖和c++、java中重写相同)

重载概念和c++、java中的重载概念相同,但实现方式不同,重载实例:

class PhpClass{  
    public $nae;  
    // PHP中有很多以两个下划线开头的方法,被称为魔术方法***********************  
    /* __call()方法的作用是: 当程序试图调用不存在或不可见的成员方法时 
     * PHP会先调用__call()方法来存储方法名及其参数。__call()方法包含 
     * 两个参数,即方法名和方法参数。其中,方法参数是以数组形式存在的  */  
    function __call($name, $arguments){  
        // 通过count($arguments)获得参数个数  
        $argNum = count($arguments);  
        //echo $argNum."***************<br/>";  
        if($name == 'right'){   // 一下方法调用中的 $this-> 不可省略  
            switch($argNum){  
                case 0:  
                    $this->right0();  
                    break;  
                case 1:  
                    $this->right1($arguments[0]);  
                    break;  
                case 2:  
                    $this->right2($arguments[0],$arguments[1]);  
                    break;  
                default:  
                    echo "参数可能多了,我不干了...<br/>";  
            }  
        }else if($name == 'left'){  
            switch($argNum){  
                case 1:  
                    $this->left1($arguments[0]);  
                    break;  
                case 2:  
                    $this->left2($arguments[0],$arguments[1]);  
                    break;  
                default:  
                    echo "参数不对,我不干了...<br/>";  
            }  
        }else{  
            echo "什么也不做...";  
        }  
    }  
    //几种实现重载的方法,方法名不相同  
    public function right0(){  
        echo 'right0<br/>';  
    }  
    public function right1($arg){  
        echo 'right1 '.$arg.'<br/>';  
    }  
    public function right2($arg1,$arg2){  
        echo 'right1 '.$arg1.' '.$arg2.'<br/>';  
    }  
    public function left0(){  
        echo 'left0<br/>';  
    }  
    public function left1($arg){  
        echo 'left1 '.$arg.'<br/>';  
    }  
    public function left2($arg1,$arg2){  
        echo 'left1 '.$arg1.' '.$arg2.'<br/>';  
    }  
}  
$lyc = new PhpClass();  
$lyc->left();           // 此处实现重载  
$lyc->left('LEFT');  
$lyc->left('LEFT','LYC');  
$lyc->right();  
$lyc->right('RIGHT');  
$lyc->right(123,'LYC');  
$lyc->right(123,'lyc','right');  

标签: function,private,public,return,关键字

赞(2)
未经允许不得转载:工具盒子 » 简单介绍PHP面向对象