博客列表 >类的三大特性以及静态成员的使用方法——2018年9月3日

类的三大特性以及静态成员的使用方法——2018年9月3日

Jackson
Jackson原创
2018年09月12日 23:46:33998浏览
  1. 类的声明和实例化

    类的声明使用关键字class,一般类名首字母大写。而实例化则使用new这个关键字,案例如下:


    实例

    <?php
    /**
     * 类的声明与实例化
     */
    //类声明 用关键字class
    class Person {
    
    }
    //使用new来创建对象
    $demo = new Person();
    var_dump($demo);
    
    //添加一些属性和方法
    $demo->name = 'jack';
    $demo->age = 33;
    $demo->hello = function (){
      return '我是匿名函数';
    };
    
    //使用->来访问 ,成员属性、方法
    echo $demo->name,'年龄是',$demo->age,'岁<br>';
    //echo $demo->hello();//这里调用的是hello方法,不是匿名函数
    //正确调用:以回调方式运行
    
    echo call_user_func($demo->hello);

    运行实例 »

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

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

    类常量是属于类的,为所有对象共享。使用类名::常量名来访问。属性重载指的是:访问不存在或者访问受限的属性时会自动调用重载方法,目的就是动态创建属性。案例如下:


    实例

    <?php
    /**
     * 类属性的重载  指动态的’创建‘属性和方法。访问不存在或私有的属性会自动调用重载方法
     * 使用魔术方法__set()  __get() 来访问
     */
    class Person{
        const IDOL = 'jackson';
        public $name ;
        private $age;
        private $sex;
    
        public function __construct($name,$age,$sex)
        {
            $this->name = $name;
            $this->age = $age;
            $this->sex = $sex;
        }
    
        //__get()访问私有属性
        public function __get($name)
        {
            return $this->$name;
        }
        //__set() 设置私有属性
        public function __set($name, $value)
        {
            $this->$name = $value;
        }
    }
    $demo1 = new Person('jackson',33,'男');
    echo '姓名:',$demo1->name,',年龄:',$demo1->age,',性别:',$demo1->sex,'<br>';
    echo Person::IDOL;

    运行实例 »

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

  3. 类的继承与方法重写

    类的继承使用extends,一个类只能有一个父类。继承可以减少代码的重复。而重写则是子类有一个方法和父类相同,但参数和内容却不同。代码如下:


  4. 实例

    <?php
    /**
     * 继承与多态
     * 继承指类之间的继承,代码复用的重要手段, 函数也可以
     * 关键字:extends
     * 引用父类成员:parent::
     * 子类可以继承父类的公共和受保护 成员
     */
    
    class demo4{
        //父类属性
        public $name;
        protected $age;
        private $salary;
        const NAME = 'DEMO4';
        private $sex = 'female';
    
        //父类构造器
        public function __construct($name,$age){
            $this->name = $name;
            $this->age = $age;
        }
    
        //属性访问重载
        public function __get($name)
        {   //判断属性是否存在
            if (isset($this->$name)){
                return $this->$name;
            }
            return '非法属性';
        }
    
    
    }
    
    //子类
    class demo41 extends demo4 {
        private $sex;
        const NAME = 'demo41';//重写父类静态啊属性
        //重写父类构造器
       public function __construct($name, $age, $sex='male')
       {
           parent::__construct($name, $age);
           $this->sex = $sex;
       }
       public function __get($name)
    {
    //    if (isset($this->$name)){
    //       return $this->$name;
    //   }
    //    return '非法属性';
        return parent::__get($name);//这样会访问不了自己的私有属性
    }
    }
    
    //echo (new demo41('june',88,'male'))->name;
    $demo41 = new demo41('jason','22');
    //访问父类中的属性
    echo $demo41->name,'<br>';
    echo $demo41->age,'<br>';
    echo $demo41->salary,'<br>';//父类的私有属性继承不了
    echo $demo41->sex,'<br>';//直接调用父类设置器,识别不出子类属性
    echo demo41::NAME;

    运行实例 »

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

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

     类中的静态成员与访问
     1.创建使用关键字:static
     2.静态成员:静态属性、静态方法
     3.静态成员属于类,使用类来访问
     4.静态成员与对象无关,所以不使用伪变量$this,引用自身类用 self::$var,这里有$符
     5.访问: 类名::静态成员

    代码如下:

    实例

    //数据库连接类  实现数据库连接
    class Demo5{
        public static $pdo = null;
        //数据库连接参数
        protected static $db =[
            'type' => 'mysql',
            'host' => '127.0.0.1',
            'dbname' => 'php',
            'user' => 'root',
            'pass' => 'root'
        ];
    
        //连接数据库的方法
        public static function connect(){
            $dsn = self::$db['type'].':host='.self::$db['host'].';dbname='.self::$db['dbname'];
    
            //创建pdo类
            self::$pdo = new PDO($dsn, self::$db['user'], self::$db['pass']);
        }
    
        //查询数据库方法
        public  static function select(){
            //准备sql语句
            $sql = "SELECT * FROM `staff` LIMIT 5;";
            //创建预处理对象
            $stmt = self::$pdo->prepare($sql);
            //执行语句
            $stmt->execute();
           //获取结果
            return $stmt->fetchAll(PDO::FETCH_ASSOC);//指定返回关联数组
        }
    }
    
    //连接数据库
    Demo5::connect();
    
    //查询数据表
    $res = Demo5::select();
    echo '<pre>',var_export($res);

    运行实例 »

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

    总结:这里主要了解了类的基本知识,以及三大特征。

           1.重载方法可以限定在外部随意创建属性,也提供了一个访问私有或受保护的属性或方法

           2.静态成员的访问方式容易和非静态成员的搅和,静态成员访问存在$符。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议