博主信息
博文 34
粉丝 0
评论 0
访问量 39346
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
类声明与类的实例化+类常量与类属性的重载+类的继承与方法重写+类中静态成员的声明与访问
Belifforz的博客
原创
831人浏览过
  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();

运行实例 »

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


批改状态:未批改

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学