Blogger Information
Blog 36
fans 0
comment 0
visits 28393
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类的三大特性以及静态成员的使用方法——2018年9月3日
Jackson
Original
999 people have browsed it
  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.静态成员的访问方式容易和非静态成员的搅和,静态成员访问存在$符。

Correction status:qualified

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