博客列表 >9.3类的声明和实例化

9.3类的声明和实例化

归宿的博客
归宿的博客原创
2018年09月07日 10:37:40758浏览
  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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议