类的声明和实例化
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);