面向对象编程的三特点: 封装性,继承性(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,关键字