1.都有构造函数constructor,php中多了一个析构函数
php中constructor命名唯一 为__construct(参数列表),析构函数为__destruct()该方法没有参数。
2.php中class也有继承,但是不支持重载,子类不会自动调用父类的构造函数,如果要调用可以使用parent关键字
class Animal{ public function __construct() { echo "Animal constructor"; } } class Dog extends Animal{ public function __construct() { echo "Dog constructor"; } } new Dog(); //输出结果为"Dog constructor"
class Monkey extends Animal{ /** * Monkey constructor. */ public function __construct() { parent::__construct(); echo "Monkey constructor<br>"; } } new Monkey(); //"Anima constructor";"Monkey constructor";
还可调用非其父类的构造器,使用方法
className::__construct();
3.php类的成分:属性,方法,常量,静态成员
属性必须为public、protected、private之一,如果修饰符为var等同于public
为了方便对属性的读写操作,php5提供了__set(),__get()方法,只对private属性有效
class Person
{
private $name;
private $sex;
private $age;
public $org;
private function __set($name, $value)
{
echo "调用set方法",$value,"<br>";
$this->$name = $value;
}
private function __get($name)
{
return $this->$name;
}
}
$p1 = new Person();
//自动调佣__set方法
$p1->name="张三";
$p1->age=27;
$p1->sex="女";
//public属性可以直接访问,不调用__set方法
$p1->org="WTO";
//自动调用__get方法
echo $p1->name;
echo $p1->sex;
echo $p1->age;
echo $p1->org;
4.类的方法
1,内部调用方式:$this->fanname();或者test::addab();
2,实例化调用$e->addb();也可以用test::addab();
5.类的常量
类中的常量定义const
class test{
private $a;
const PI = '3.14′;
…..
类中调用上面的常量方法如:"$this::PI",或者“类名::PI”
实例化中,只能通过 类名::PI才可以调用常量。
$e= new test();
$e->PI =5; //注意,这里用 ->只是创造了一个也是名为PI的属性,而不是改变类中的PI常量的值。
echo $e::PI; //这个才是调用类的常量。
注意:常量只能用::来调用,不能改变其值。
6.类的静态成员(静态属性或者静态方法)
什么时候使用静态成员呢,需要创建所有类是实例共享的字段或者方法的时候,需要静态成员。
静态成员的特征如下:
6.1,静态成员,他让脚本上的所有该类的实例调用,但是不能借助类的特定实例调用,而是在类的外部,统一使用”类名::$成员“的方式调用
类的内部则统一用”self::$成员“来调用。
6.2,当新创建一次实例时,静态成员会从上次创建的实例最后值开始重新计算,而不是类中初始值开始计算。
6.3,对于public定义的静态成员,可以在外部更改他的值,private则不可以改变其值。
class test{
public static $v = 0;
function __construct(){ self::$v++; }
static function getV(){ return self::$v; }
}
$a = new test();
echo test::getV(); // 返回 1
$b = new test();
echo test::getV(); // 返回 2
test::$v=8; //由于public定义的成员,改变静态成员的值。
$c = new test();
echo test::getV(); // 返回 9