类的声明和实例化
类的声明使用关键字class,一般类名首字母大写。而实例化则使用new这个关键字,案例如下:
实例
<?php /** * 类的声明与实例化 */ //类声明 用关键字class class Person { } //使用new来创建对象 $demo = new Person(); var_dump($demo); //添加一些属性和方法 $demo->name = 'jack'; $demo->age = 33; $demo->hello = function (){ return '我是匿名函数'; }; //使用->来访问 ,成员属性、方法 echo $demo->name,'年龄是',$demo->age,'岁<br>'; //echo $demo->hello();//这里调用的是hello方法,不是匿名函数 //正确调用:以回调方式运行 echo call_user_func($demo->hello);
运行实例 »点击 "运行实例" 按钮查看在线实例
类的常量与属性的重载
类常量是属于类的,为所有对象共享。使用类名::常量名来访问。属性重载指的是:访问不存在或者访问受限的属性时会自动调用重载方法,目的就是动态创建属性。案例如下:
实例
<?php /** * 类属性的重载 指动态的’创建‘属性和方法。访问不存在或私有的属性会自动调用重载方法 * 使用魔术方法__set() __get() 来访问 */ class Person{ const IDOL = 'jackson'; public $name ; private $age; private $sex; public function __construct($name,$age,$sex) { $this->name = $name; $this->age = $age; $this->sex = $sex; } //__get()访问私有属性 public function __get($name) { return $this->$name; } //__set() 设置私有属性 public function __set($name, $value) { $this->$name = $value; } } $demo1 = new Person('jackson',33,'男'); echo '姓名:',$demo1->name,',年龄:',$demo1->age,',性别:',$demo1->sex,'<br>'; echo Person::IDOL;
运行实例 »点击 "运行实例" 按钮查看在线实例
类的继承与方法重写
类的继承使用extends,一个类只能有一个父类。继承可以减少代码的重复。而重写则是子类有一个方法和父类相同,但参数和内容却不同。代码如下:
实例
<?php /** * 继承与多态 * 继承指类之间的继承,代码复用的重要手段, 函数也可以 * 关键字:extends * 引用父类成员:parent:: * 子类可以继承父类的公共和受保护 成员 */ class demo4{ //父类属性 public $name; protected $age; private $salary; const NAME = 'DEMO4'; private $sex = 'female'; //父类构造器 public function __construct($name,$age){ $this->name = $name; $this->age = $age; } //属性访问重载 public function __get($name) { //判断属性是否存在 if (isset($this->$name)){ return $this->$name; } return '非法属性'; } } //子类 class demo41 extends demo4 { private $sex; const NAME = 'demo41';//重写父类静态啊属性 //重写父类构造器 public function __construct($name, $age, $sex='male') { parent::__construct($name, $age); $this->sex = $sex; } public function __get($name) { // if (isset($this->$name)){ // return $this->$name; // } // return '非法属性'; return parent::__get($name);//这样会访问不了自己的私有属性 } } //echo (new demo41('june',88,'male'))->name; $demo41 = new demo41('jason','22'); //访问父类中的属性 echo $demo41->name,'<br>'; echo $demo41->age,'<br>'; echo $demo41->salary,'<br>';//父类的私有属性继承不了 echo $demo41->sex,'<br>';//直接调用父类设置器,识别不出子类属性 echo demo41::NAME;
运行实例 »点击 "运行实例" 按钮查看在线实例
类中静态成员的声明与访问
类中的静态成员与访问
1.创建使用关键字:static
2.静态成员:静态属性、静态方法
3.静态成员属于类,使用类来访问
4.静态成员与对象无关,所以不使用伪变量$this,引用自身类用 self::$var,这里有$符
5.访问: 类名::静态成员代码如下:
实例
//数据库连接类 实现数据库连接 class Demo5{ public static $pdo = null; //数据库连接参数 protected static $db =[ 'type' => 'mysql', 'host' => '127.0.0.1', 'dbname' => 'php', 'user' => 'root', 'pass' => 'root' ]; //连接数据库的方法 public static function connect(){ $dsn = self::$db['type'].':host='.self::$db['host'].';dbname='.self::$db['dbname']; //创建pdo类 self::$pdo = new PDO($dsn, self::$db['user'], self::$db['pass']); } //查询数据库方法 public static function select(){ //准备sql语句 $sql = "SELECT * FROM `staff` LIMIT 5;"; //创建预处理对象 $stmt = self::$pdo->prepare($sql); //执行语句 $stmt->execute(); //获取结果 return $stmt->fetchAll(PDO::FETCH_ASSOC);//指定返回关联数组 } } //连接数据库 Demo5::connect(); //查询数据表 $res = Demo5::select(); echo '<pre>',var_export($res);
运行实例 »点击 "运行实例" 按钮查看在线实例
总结:这里主要了解了类的基本知识,以及三大特征。
1.重载方法可以限定在外部随意创建属性,也提供了一个访问私有或受保护的属性或方法
2.静态成员的访问方式容易和非静态成员的搅和,静态成员访问存在$符。