博主信息
博文 30
粉丝 0
评论 0
访问量 28169
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
9.3类的声明和实例化
归宿的博客
原创
935人浏览过
  1. 类的声明和实例化

class Demo1
{

}
//使用类首先要实例化,new
$demo1 = new demo1();

//给对象添加一些属性和方法(2个属性,1个方法)
$demo1 -> name = 'peter';
$demo1 -> sex = '男';
$demo1 -> hello = function(){
    return '我是一个自定义的方法';
};

//访问对象成员(属性和方法)
echo $demo1->name,':',$demo1->sex.'<br>';

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

class Demo3
{
    //类常量:被所有对象所共享的数据
    const SITE_NAME = 'php中文网';

    //声明私有属性
    private $name;
    private $course;
    private $grade;

    //构造方法(魔术方法),构造器
    public function __construct($name, $course, $grade)
    {
        $this->name = $name;
        $this->course = $course;
        $this->grade = $grade;

        //构造方法中调用本类的方法,在创建对象之前执行
        echo $this->show();
    }

    //输出当前属性的内容
    public function show()
    {
        return $this->name . '的' . $this->course . '课程成绩是' . $this->grade;
    }

    //获取属性的重载,$name是要查看的属性名称,就是一个字符串
    public function __get($name)
    {
        if ($name == 'grade') {
            echo $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 Demo3::SITE_NAME,'<hr>';

//实例化
$demo3 = new Demo3('peter','php',82);
//var_dump($demo3);
//echo $demo3->show();
//new Demo3('peter','php',82);  //new的时候就已经echo数据了

echo '<hr>';
//3属性重载:四种场景:获取,设置,检测,销毁
//当从类的外部访问类中不存在或无权访问的属性的时候,这些重载方法会被自动调用(触发)
//1.获取
echo '姓名:'.$demo3->name.'<br>';
echo '成绩:'.$demo3->grade.'<br>';

//2.设置
$demo3->course = 'python';
echo '课程:',$demo3->course,'<br>';
//3.检测
echo (isset($demo3->name)  ? '存在<br>' : '不存在<br>');
echo (isset($demo3->grade)  ? '存在<br>' : '不存在<br>');

//3.销毁
unset($demo3->$course);  //unset()没有返回值
echo '姓名:'.$demo3->name.'<br>';  //没有销毁掉姓名和成绩,上面有做判断

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

class Demo4
{
    //父类属性
    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 Demo4_1 extends Demo4  //子类,派生类
{
    //子类私有属性
    private  $sex;
    const APP_NAME  = '教师管理系统'; //类常量

    //用多态的方式对父类的构造方法进行重写
    public function __construct($name,$age,$sex)
    {
        //多态:子类中和父类中同名的方法进行重写
        parent::__construct($name,$age);//实现简写
//        $this->name = $name;
//        $this->age = $age;
        $this->sex = $sex;
    }
}
//new的demo4_1,这个就是工作类
$demo4_1 = new Demo4('peter',20,'male');
echo $demo4_1 -> age;  //没有属性访问重载,是不能访问的
echo $demo4_1 -> name;
echo $demo4_1 ->sex;

echo Demo4::APP_NAME;
echo '<hr>';
echo Demo4_1::APP_NAME;

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

class Demo5
{
    public static $pdo = null;
    protected  static $db =[
        'type' => 'mysql',
        'host' => '127.0.0.1',
        'dbname' => 'php',
        'user' => 'root',
        'pass' => 'root',
    ];

    //连接数据库并生成PDO对象
    public static  function connect()
    {
        $dsn = 'mysql:host=127.0.0.1;dbname=php';
//        $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,$files='*',$num=5)
    {
        $stmt = self::$pdo->prepare("SELECT {$files} FROM {$table} LIMIT {$num}");
        $stmt -> execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}
//连接数据库
Demo5::connect();
//var_dump(Demo5::$pdo);
$result = Demo5::select('staff','name,age,salary',6);
echo '<pre>'.var_export($result);


批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学