php面向对象笔记
程序员文章站
2024-03-17 16:57:22
...
<?php
class car { //父类
var $high; //定义类成员 使用var
static $price=112233; //定义静态变量
function __construct($arg1){ //构造函数
$this->high = $arg1;//给类成员赋值
}
function echo_info(){ //输出函数
echo "汽车的高度".$this->high."<br>";
}
function echo_text(){
echo "运行完毕";
}
function __destruct(){ //析构函数
print "over";
}
static function pr($arg,$arg1){ //静态方法
echo $arg*$arg1;
}
}
class suncar extends car{ //子类继承父类
var $color;
static $number=1;
function __construct($arg1){
$this->color = $arg1;
}
function echo_info(){
echo "汽车的颜色".$this->color;
echo "<br>";
echo "价格=".car::$price; //调用父类静态变量
//echo "价格=".parent::$price; //这两种方式也可以
//echo "价格=".suncar::$price;
echo "<br>";
echo "汽车数量=".suncar::$number; //调用子类静态变量 或者:self::$number 也可以
echo "<br>";
echo car::echo_text(); //调用父类方法
//echo parent::echo_text(); //这两种方式也可以
//echo suncar::echo_text();
echo "<br>";
}
}
$dp = new car("1.2m");//对象实例化
$dp->echo_info();//调用类函数
$xp = new suncar("yellow");
$xp->echo_info();
echo "<hr>";
echo"在类外调用类内的静态变量及静态方法";
echo "<br>";
echo car::pr(1,2);//调用父类静态方法
echo "<br>";
echo car::$price;//调用类静态变量
echo "<br>";
?>
结果:
注意事项:
self与this是被讨论最多,也是最容易引起误用的组合。两者的主要区别如下:
1、this不能用在静态成员函数中,self可以;
2、对静态成员函数/变量的访问,建议 用self,不要用this->的形式;
3、对非静态成员变量的访问,不能用self,只能用this;
4、this要在对象已经实例化的情况下使用,self没有此限制;
5、在非静态成员函数内使用,self抑制多态行为,引用当前类的函数;而this引用调用类的重写(override)函数(如果有的话)。
静态方法很好用,不用实例化对象,当类第一次加载的时候就已经给了静态成员空间。但是什么东西都是不能滥用的。因为一旦静态成员声明的过多,空间一直被占用着,那么会影响系统的运行速度和功能,所以切记:东西虽好,可不能贪多哦!