Blogger Information
Blog 34
fans 0
comment 0
visits 32344
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类声明与类的实例化+类常量与类属性的重载+类的继承与方法重写+类中静态成员的声明与访问
Belifforz的博客
Original
678 people have browsed it
  1. 类的声明与实例化

实例

<?php
/**
 *类的声明与实例化
 */
class demo1//声明类
{
    public  $name = 'zhangsan';

    public function __construct()
    {
         echo 'Hello world.';
}
$demo1 = new Demo1();//实例化类

运行实例 »

点击 "运行实例" 按钮查看在线实例

2.类常量与类属性的重载

实例

<?php
/**
 *类常量与类属性的重载
 */
class demo2//声明类
{
    const  APP_NAME = 'PHP';//类常量
    private $age = 28;
    private $name = 'lisi';
    private $sex = 1;
    private $salary = 3800;
    

    //类属性的重载


    public function __get($str)
    {
        if(isset($this->$str))
        {
            return $this->$str;
        }else{
            return '属性不存在';
        }
    }

    public function __set($str,$value)
    {
        if($str == 'age')
        {
            return  $str.'不允许修改';
        }else{
           $this->$str = $value;
        }
    }

    public function __isset($str)
    {
        if ($str == 'salary')
        {
            return false;
        }
        return isset($this->$str);
    }

    public function __unset($str)
    {
        if ($str == 'salary')
        {
            return '不能销毁';
        }
         unset($this->$str);
    }



}


$demo2 = new Demo2();//实例化类

echo $demo2::APP_NAME,'<br>';//类常量的调用

//获取
echo $demo2->age,'<br>';
echo $demo2->height,'<br>','<hr>';

//设置
$demo2->age = 40 ;
$demo2->salary = 4800;
echo $demo2->age,'<br>';
echo $demo2->salary,'<br>','<hr>';

//检测

echo isset($demo2->salary) ? '存在' : '不存在' ,'<br>';
echo isset($demo2->name) ? '存在' : '不存在' ,'<br>','<hr>';

//销毁
unset($demo2->sex);
echo $demo2->sex,'<br>';

unset($demo2->salary);
echo $demo2->salary,'<br>','<hr>';

运行实例 »

点击 "运行实例" 按钮查看在线实例

3.类的继承与方法重写

实例

<?php
/**
 * 对象三要素之: 继承与多态
 * 1. 继承是指类之间的继承,是代码复用的重要手段,之前我们是通过"函数"实现的代码复用
 * 2. 继承使用关键字: extends
 * 3. 引用父类成员: parent::
 * 4. 子类可以将父类中的公共和受保护成员全部继承
 */

class Demo3
{
    //父类属性
    
    const APP_NAME = 'PHP';
    public $name;
    protected $age;
    private $salary;

    //父类构造器
    public function __construct($name, $age)
    {
        $this->name = $name;
        $this->age = $age;
    }

    //属性访问重载
    public function __get($name)
    {
        if (isset($this->$name)) {
            return $this->$name;
        }
        return '非法属性';
    }
}

class Demo4 extends Demo3
{
    //子类自有属性
    private $sex;
    const APP_NAME = 'HTML';  //类常量可以在子类中重写

    //子类将父类同名方法进行重写,根据传入参数不同,实现不同的功能,这就是多态性
    public function __construct($name, $age, $sex='male')
    {

        //引用父类的构造方法来简化代码
        parent::__construct($name, $age);
        $this->sex = $sex;
    }

    //将父类属性重载方法重写后,顺利读取子类属性
    //所以属性重载方法__get()应该设置在最终工作类中(例如本类Demo4),而不是父类Demo3中
    //此时,将父类Demo3中的__get()删除,代码执行仍然正确
    public function __get($name)
    {
        if (isset($this->$name)) {
            return $this->$name;
        }
        return '非法属性';
    }

}

//当前类Demo4中即使没有任何成员,一样可以访问父类成员
$demo4 = new Demo4('zhangsan', 28);
//访问父类中的属性
echo $demo4->name,'<br>';
echo $demo4->age,'<br>';
echo $demo4->salary,'<br>';   // 父类私有属性子类不可见,访问不到
echo Demo4::APP_NAME, '<br>';  // 访问类常量
echo $demo4->sex, '<br>'; //取不值,因为父类__get()不能识别子类属性

运行实例 »

点击 "运行实例" 按钮查看在线实例

4类中静态成员的声明与访问

实例

<?php
/**
 * 类中的静态成员与访问
 * 1.类中静态成员使用关键字:static 定义;
 * 2.静态成员包括: 静态属性和静态方法;
 * 3.静态成员是属于类的,我们应该终终使用类来访问;
 * 4.静态属性必须使用类来访问,而静态方法即可以用类,也可以用对象访问;
 * 5.静态成员是可以有访问限制的: public,protected,private;
 * 6.静态成员与对象无关,所以内部不允许使用伪变量: $this;
 * 7.访问时,类名后必须使用:范围解析符:双冒号[::]
 * 8.在类中引用自身使用关键字: self::
 *
 * 范围解析符的作用:
 * 1. 访问静态成员;
 * 2. 访问类常量;
 * 3. 继承上下文中引用被覆盖成员
 */

class Demo5
{
    public static $name = '张三';
    public static $age = 28;
    public static $salary = 3000;

    public static function getMassge()
    {
         return '姓名:'.self::$name.',年龄:'.self::$age.',工资:'.self::$salary;
    }

}

//访问静态成员:无需实例化
echo demo5::$name,'<br>';
echo demo5::getMassge();

运行实例 »

点击 "运行实例" 按钮查看在线实例


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments