Blogger Information
Blog 30
fans 0
comment 0
visits 22461
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
9.3类的声明和实例化
归宿的博客
Original
759 people have browsed it
  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);


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