批改状态:合格
老师批语:
/*** 静态成员、类常量是属于类本身,不需要实例化,就可以被访问到* 1. static 静态成员* 2. self:: 类引用* 3. const 类常量* 4. __callStatic 当调用部存在的静态方法时* 5. :: 范围解析符 用于类常量,静态成员的访问*/
class Teacher{public const cates = ['前端','后端','全栈'];// 静态属性public static string $uname;private static int $salary;static int $count = 0;// 修饰符 放在 类型符 前面 : static stringpublic static string $siteName = 'php中文网';// 静态方法:如果是公共的,可省public,不建议public static function getCount(){// 静态成员与类的实例无关,不能用 $this 来访问// 使用 self:: 引用,静态成员用$ sell::$countreturn sprintf(__CLASS__ . '类被实例化了%d次' , self::$count);}public function __construct($uname,$salary){self::$uname = $uname;self::$salary = $salary;self::$count++;}public static function getBK(){return self::$uname . '来自' . self::$siteName . '可以胜任' . join(',', self::cates);}}// print_r(Teacher::cates); //类常量不建议类外部访问$mj = new Teacher('灭绝',20000);//echo $mj->getCount();echo Teacher::getCount()."<br />";echo Teacher::getBK();

注意点:
修饰符 放在 类型符 前面 : static string静态方法:如果是公共的,可省public,不建议静态成员与类的实例无关,不能用 $this 来访问;使用 self:: 引用,静态成员用$ sell::$count类常量不建议类外部访问
interface iDemo{// 所有成员必选是公共的public const gender = 'MALE';// 所有方法都是抽象方法(只有声明,没有实现)public function sum($a, $b);public function sub($a, $b);public function mul($a, $b);public function div($a, $b);}
abstract class aDemo implements iDemo{public function sum($a, $b){return $a + $b;}public function sub($a, $b){return $a - $b;}// 没有实现的方法,在抽象类中可声明abstract public function mul($a, $b);abstract public function div($a, $b);}interface A{public const A = 1;}interface B{public const B = 2;}class User implements A, B {}
组合式继承,解决php oop 单继承,高耦合的诟病
// trait: 工具箱,基于类的语法,但和接口一样,不能实例化trait t1{public function dump($data){var_dump($data);die;}}trait t2{public function sum($a,$b,...$arg){return $a + $b +array_sum($arg);}}class work1 extends work{use t1,t2;/*public function sum($a,$b,...$args){return "hello php中文网";}*/}echo (new work1)->sum(10, 20, 30, 40, 50);


注意点:
定义接口的所有成员必选是公共的定义接口所有方法都是抽象方法(只有声明,没有实现)oop 单继承 只能继承一个父类但可以实现多个接口,多态抽象类中可以有抽象方法,可以部分实现接口中的抽象方法没有实现的方法,在抽象类中可声明* 同名方法优先级别:当前类同名成员 > trait > 继承成员
// ! 后期静态绑定 static::// 静态继承时,不要再用self::,全部用static::class Car{private static function getName(){return 'Car';}public static function run(){// ! php内核将类的继承实现了放在编译阶段 就确认了self解析为car// self:: 的限制,对当前类的静态引用,取决于定义当前方法所在的类,定义类和调用类不能绑定// return self::getName();// ! static 后期静态绑定 static::不再被解析为定义当前方法所在的类,而是实际运行时计算的return static::getName();}}class BMW extends Car{public static function getName(){return 'E300';}}echo Car::run() . PHP_EOL; // Carecho BMW::run() . PHP_EOL; // Car

查询构造器:Db::table()->field()->where()->limit(1)->select();
class Query{protected $db; // pdo链接对象protected $table;protected $field;protected $limit;// 链接数据库private function connect($dsn, $username, $password){$this->db = new PDO($dsn, $username, $password);}function __construct($dsn, $username, $password){$this->connect($dsn, $username, $password);}function table($table){$this->table = $table;return $this;}function field($filed){$this->field = $filed;return $this;}public function limit($limit){$this->limit = $limit;return $this;}public function getSql(){return sprintf('SELECT %s FROM %s Limit %d', $this->field, $this->table, $this->limit );}public function select(){return $this->db->query($this->getSql())->fetchAll(PDO::FETCH_ASSOC);}}// 工作类class db{static function __callStatic($method, $args){$dsn = 'mysql:host=localhost;dbname=shop';$query = new Query($dsn,'root', 'root');// 直接委托给Query类中的普通方法完成return call_user_func([$query, $method],...$args);}}$res = Db::table('users')->field('uid,username,phone')->limit(3)->select();var_dump($res);

@形参名字可以随便起名字,一一对应即可;链式调用的方法名系统已固定,不可更改
function field($filed1){$this->field1 = $filed1;return $this;}public function limit($limit){$this->limit = $limit;return $this;}public function getSql(){return sprintf('SELECT %s FROM %s Limit %d', $this->field1, $this->table, $this->limit );}public function select(){return $this->db->query($this->getSql())->fetchAll(PDO::FETCH_ASSOC);}// 工作类class db{static function __callStatic($method, $args){$dsn = 'mysql:host=localhost;dbname=shop';$query = new Query($dsn,'root', 'root');// 直接委托给Query类中的普通方法完成return call_user_func([$query, $method],...$args);}}$res = Db::table('users')->field('uid,username,phone')->limit(3)->select();var_dump($res);

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号