php中class使用,对比java中的class

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();

扫描二维码关注公众号,回复: 1909264 查看本文章

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

猜你喜欢

转载自www.cnblogs.com/DolphWang/p/9272815.html
今日推荐