Blogger Information
Blog 21
fans 0
comment 0
visits 18655
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
类声明与实例化\类常量与类属性的重载\类的继承与方法重写\类中静态成员的声明与访问—2018年9月04日0时58分
耗子的博客
Original
799 people have browsed it

本课程内容听都能理解,自己实际敲代码过程出错过几次;需要多次敲代码;

实例类的声明与实例化1

<?php
/**
 * 编程1: 类声明与类的实例化;
 */


 //类声明:class

class user{

}

//使用类前,实例化
$test=new user();


//给对象手工的方式添加属性和方法
$test->name='熊成浩';
$test->age=28;
$test->sex='男';

$test->hello=function (){
    return '自定义的方法';
};


//访问对象成员(属性和方法)

echo $test->name,'---',$test->sex,'---',$test->age;

echo '<br>';

//访问方法

echo ($test->hello)();//自执行的函数,不建议使用

echo '<br>';

//使用回调方式来执行,正确的执行方法

echo call_user_func($test->hello);

运行实例 »

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

实例类的声明与实例化2

<?php

class  demo2
{
    //声明类属性
    public $name;
    public $age=28;

    protected  $sex=2;//受保护成员 ,仅限本类或本类子类中访问,外部不可见,0为男,1为女 其他为保密

    private  $salary=4000;//私有成员,仅限在本类使用,子类和外部不可见

    public  function  getSex()
    {
        //返回语义化的性别名称
          if ($this->sex==0)
          {
              return '男';
          }
          elseif ($this->sex==1)
          {
              return '女';
          }
          else
          {
              return '保密';
          }
//        return ($this->sex==0)?'男' :'女';
    }
    public function  getSalary(){

        return ($this->salary<6000) ?'工资太低不好意思拿出来':$this->salary;
    }

}

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

echo '年龄(公共):',$demo2->age;

echo '<hr>';

echo '性别(受保护):',$demo2->getSex();
echo '<hr>';

echo '工资(私有):',$demo2->getSalary();
echo '<hr>';

运行实例 »

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

实例类常量对象初始化属性的重载

<?php
//类常量
//对象初始化
//属性的重载

class demo3{
    //类常量是对所有对象共享的数据
    const SITE_NAME='我在PHP中文网学习';

    //声明三个私有属性

    private $name;
    private $age;
    private $sex;

    //对象初始化(使用构造方法魔术方法)
    //类实例化时会自动调用构造方法
    public function __construct($name,$age,$sex)
    {
        $this->name=$name;
        $this->age=$age;
        $this->sex=$sex;

        //执行方法show()
        echo $this->show();
    }


    public function show()
    {
        return $this->name.'的性别是:'.$this->sex.',年龄是:'.$this->age;
    }

        //获取属性的重载方法
        public function __get($name)
    {
        if ($name=='sex'){
            return $name.'不允许查看';
        }
        return $this->$name;
    }

    //设置属性的重载方法
    public function  __set($name, $value)
    {
        if ($name=='sex')
        {
            return $name.'禁止修改名称';
        }
         $this->$name=$value;
    }

    //检测属性的重载方法
    public function __isset($name)
    {
        if ($name=='anme')
        {
            return false;//返回false后在输出时再次通过三元运算符显示字符串
        }
        return isset($this->$name);
    }

    //销毁属性的重载方法
    public function __unset($name)
    {
        if ($name=='name')
        {
            return false;
        }
        unset($this->$name);
    }

}

//访问类常量
echo demo3::SITE_NAME;
echo '<hr>';

//实例化
$test=new demo3('小王',28,'男');
var_dump($test);

echo '<hr>';
$test2=new demo3('小红',18,'女');




//属性重载的4种场景:获取,设置,检测,销毁
//当从类的外部访问类中不存在或无权访问的属性时,这些重载方法会被自动触发
echo '<hr>';
echo '获取性别:',$test2->sex;
echo '<hr>';
echo '获取名称:',$test2->name;

echo '<hr>';
echo '设置前的值:'.$test2->name;
echo '<br>';
$test2->name='小李子';
echo '设置后的值:'.$test2->name;

echo '<hr>';
echo '设置前的值:'.$test2->age;
$test2->age='19';
echo '<br>';
echo '设置后的值:'.$test2->age;

echo '<hr>';
echo isset($test2->age) ? '检测:存在' : '检测:不存在';
echo '<br>';
echo isset($test2->sss)?'检测:存在':'检测:不存在';
echo '<hr>';


echo '销毁前输出:'.$test2->name;
echo '<br>';
unset($test2->name);
echo '销毁后输出:'.$test2->name;
echo '<hr>';

echo '销毁前输出:'.$test2->age;
echo '<br>';
unset($test2->age);
echo '销毁后输出:'.$test2->age;
echo '<hr>';

运行实例 »

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

实例继承与方法重写

<?php
//对象三要素:继承与多态
//1、继承是指类之间的继承,代码复用的字段
//2、继承关键字:extends
//3、引用父类成员:parent::
//4、子类可以将父类中公共和受保护的成员继承,public 公共  protected 受保护


//设置父类 基类 超类
class demo4
{
    //设置父属性
    public $name;
    private $salary;
    protected $age;
    const APP_NAME='学生管理系统';//类常量可以在子类中重写


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

    }

//    //属性检测重载
//    public  function  __isset($name)
//    {
//       if (isset($this->name))
//       {
//           return false;
//       }
//       return isset($this->$name);
//    }
}

//重载方法必须写到工作类当中,new的是谁谁就是工作类
//设置子类 派生类
class demo4_1 extends demo4
{
    //子类自有属性定义
    private $sex;
    const APP_NAME='教师管理系统';//类常量可以在子类中重写
    //将父类中的构造方法进行重写
    public function __construct($name,$age,$sex)
    {
        //       $this->name=$name; //这样写代码冗余
        //       $this->age=$age;
        parent::__construct($name, $age);//应该使用parent关键字引用,把参数传入
       $this->sex=$sex;
    }
    //属性访问重载
    public function __get($name)
    {
        if (isset($this->$name)){
            return $this->$name;
        }
        return '非法访问';
    }

}
//当前的工作类就是就是子类,需要把上面的重载方法写到下面
$demo4_1 = new demo4_1('haozi',18,'男');
echo $demo4_1->name;
echo '<br>';
echo $demo4_1->age;
echo '<br>';
echo $demo4_1->aa;
echo '<br>';
echo $demo4_1->sex;
echo '<hr>';

//类常量可以在子类中重写
echo '父类中的常量:'.demo4::APP_NAME;
echo '<br>';
echo '子类中的常量:'.demo4_1::APP_NAME;

运行实例 »

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

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

<?php

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'];

        $user=self::$db['user'];
        $pass=self::$db['pass'];
        self::$pdo=new PDO($dsn,$user,$pass);

    }
    //查询数据库
    public static function select($table,$fields='*',$num=5)

    {
        $stmt=self::$pdo->prepare("SELECT {$fields} FROM {$table} LIMIT {$num}");

        $stmt->execute();//执行
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

    //连接数据库
    demo5::connect();
    var_dump(demo5::$pdo);

    //数据表查询
    $result=demo5::select('user','name,password,email',10);

    echo '<pre>';
    echo var_export($result);

运行实例 »

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

面向对象的三大特征:封装、继承、多态

封装的基本知识:

1、封装的本质,就是对象成员的访问进行限制

2、类成员:类属性,类方法

3、类成员的访问限制:3p   public公共   protected受保护     private私有

4、如果成员被限制外部访问,那么应该提供公共访问接口

5、类中对象对实例化成员的访问:伪变量 $this.当前类的实例对象

属性重载的4种场景:__get获取,__set设置,__isset检测,__unset销毁

当从类的外部访问类中不存在或无权访问的属性时,这些重载方法会被自动触发

设置父类子类,重载方法必须写到工作类当中,new的是谁谁就是工作类


 类中的静态成员与访问

 1.类中静态成员使用关键字:static 定义;

 2.静态成员包括: 静态属性和静态方法;

 3.静态成员是属于类的,我们应该终终使用类来访问;

 4.静态属性必须使用类来访问,而静态方法即可以用类,也可以用对象访问;

 5.静态成员是可以有访问限制的: public,protected,private;

 6.静态成员与对象无关,所以内部不允许使用伪变量: $this;

 7.访问时,类名后必须使用:范围解析符:双冒号[::]

 8.在类中引用自身使用关键字: self::

 

 范围解析符的作用:

 1. 访问静态成员;

 2. 访问类常量;

  3. 继承上下文中引用被覆盖成员


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
Author's latest blog post