博客列表 >类声明与访问+2018年9月3日

类声明与访问+2018年9月3日

Lee的博客
Lee的博客原创
2018年09月04日 14:25:03608浏览

1.类声明与类的实例化:

实例

<?php
/**
 * 类的声明与实例化
 * 1. 类声明: class;
 * 2. 类的实例化: new
 * 3. 对象成员的访问:->
 */
//用关键字class声明一个类
class zuoye1{

}
//用关键字 new 实例化一个类
$zuoye1 = new zuoye1();

//给当前对象添加一些属性和方法
$zuoye1->name = '小喳喳';
$zuoye1->sex = '女';
$zuoye1->hello = function (){
    return'这是一个类';
};

//使用对象访问符:-> 来访问对象中的成员
echo $zuoye1->name,'是',$zuoye1->sex,'生','<br>';

//正确调用方式
echo call_user_func($zuoye1->hello),'<br>';

运行实例 »

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

QQ截图20180904141541.png


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

实例

<?php
class zuoye2{
    //类常量:所有对象共享,用类名加范围解析符(::)访问,且默认为公共属性public
    //类常量可用来创建对象之间的共享数据
    const FULLNAME = '大渣渣';
    //声明三个私有属性
    private $name;
    private  $course;
    private  $grade;

    //构造方法
    public function __construct($name,$course,$grade)
    {
        $this->name = $name;
        $this->course = $course;
        $this->grade = $grade;
    }
    //输出属性内容
    public function show(){
        return $this->name.'的'.$this->course.'课程的成绩是:'.$this->grade.'分';
    }
//获取属性的重载
    public function __get($name)
    {
        if ($name == 'grade'){
            return $name.'不允许查看';
        }
        return $this->$name;

    }
    //更新属性的重载
    public function __set($name,$value)
    {
        if ($name == 'grade'){
            echo $name.'不允许修改';
        }
        $this->$name = $value;
    }
    public function __isset($name)
    {
        if ($name == 'grade'){
            return false;
        }
        return isset($this->$name);
    }
//    public function __unset($name)
//    {
//        if ($name == 'grade' || $name == 'name'){
//            return false;
//        }
//        unset($this->$name);
//    }

}

//访问类常量
echo zuoye2::FULLNAME,'<br>';
//实例化Demo3,创建对象
$zuoye2 = new zuoye2('喳喳','CORLDRAW','88');
echo '<pre>';
var_dump($zuoye2);
echo '<br>';
//访问属性,
echo $zuoye2->show();
echo '<hr>';
//获取
echo '姓名: ', $zuoye2->name, '<br>';

//设置
$zuoye2->course = 'AI';
echo '课程: ', $zuoye2->course,'<br>';

//检测,因为grade私有,所以外部检测不到,如类中有__isset()方法就可以检测到
echo isset($zuoye2->name) ? '存在<br>' : '<span style="color:red">不存在</span><br>';
echo isset($zuoye2->grade) ? '存在<br>' : '<span style="color:red">不存在</span><br>';

//销毁
//unset($zuoye2->course);

运行实例 »

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

QQ截图20180904141906.png

3.类的继承与方法重写:

实例

<?php
//类的继承与方法重写;
class zuoye3{
    //父类属性
    public $name;
    protected $age;
    private $salary;
    const APP_NAME = '大渣渣';

    //父类构造器
    public function __construct($name,$age)
    {
        $this->name = $name;
        $this->age = $age;
    }
    //属性访问重载
    public function __get($name)
    {
        if (isset($this->$name)){
            return $this->$name;
        }
        return '非法属性';
    }
}

class zuoye3_1 extends zuoye3{
    //子类自有属性
    private $sex;
    const APP_NAME = '小喳喳';

    //子类将父类同名方法进行重写
    public function __construct($name,$age,$sex)
    {
        parent::__construct($name,$age);
        $this->sex = $sex;
    }
       //重载
    public function __get($name)
    {
        if (isset($this->$name)){
            return $this->$name;
        }
        return '非法属性';
    }

}
//当前类Demo4_1中即使没有任何成员,一样可以访问父类成员
$zuoye3_1 = new zuoye3_1('喳喳','19','female');
//访问父类中的属性
echo $zuoye3_1->age,'<br>';
echo $zuoye3_1->sex,'<br>';

运行实例 »

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

QQ截图20180904141934.png

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

实例

<?php

class zuoye4{
    public static $pdo = null;
    //数据库变量
    protected static $db = [
        'type' => 'mysql',
        'host' => 'localhost',
        'dbname' => 'php',
        'user' => 'root',
        'pass' => 'root',
    ];

    public static function connect(){
        $dsn = self::$db['type'].':host='.self::$db['host'].';dbname='.self::$db['dbname'];
        self::$pdo = new PDO($dsn,self::$db['user'],self::$db['pass']);
    }


    public static function select($table,$fields='*',$num){
        $stmt = self::$pdo->prepare("SELECT {$fields} FROM {$table} LIMIT {$num}");
        $stmt->execute();
        return $stmt->fetchall(PDO::FETCH_ASSOC);
    }
}
//连接数据库
zuoye4::connect();
//查询数据表
$result = zuoye4::select('staff','name,age,salary','6');

echo '<pre>',var_dump($result);

运行实例 »

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

QQ截图20180904142000.png

总结:类的基本使用,链接数据库比较好用

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