类的静态成员;接口、抽象类、trait ;后期静态

编辑: admin 分类: 电脑知识 发布时间: 2023-06-14 来源:互联网
  1. 类的静态成员、类引用
    static 标识静态成员
    self 类引用,self::,$this用于对象引用
    const 类常量
    __callStatic,调用不存在或无权访问的静态方法时会被调用
    ::范围解析符,self::用于类常量静态成员的访问
  1. class Teacher{
  2. // 类常量
  3. public const CATES = ['前端','后端','全栈'];
  4. // 静态属性和类常量,属于类本身,不需要实例化就可以访问
  5. public static string $uname;
  6. private static int $salary;
  7. public static string $siteName= '中文网';
  8. static int $count = 0;
  9. public function __construct($uname,$salary){
  10. self::$salary=$salary;
  11. self::$uname=$uname;
  12. self::$count++;
  13. }
  14. static function getName(){
  15. return self::$uname.'是老师。';
  16. }
  17. }
  18. $user = new Teacher('mj', 2000);
  19. echo Teacher::$uname;//带$
  20. print_r(Teacher::CATES);//不带$
  21. echo Teacher::getName();
  22. echo Teacher::$count;
  1. 接口、抽象类、trait
    接口是定义,主管的角色,类是实现,接口是抽象的类
  1. interface Demo
  2. {
  3. //所有成员必须公开
  4. public const CITY = 'JinHua';
  5. // 所有方法都是抽象方法,只声明不实现
  6. public function sum($arr);
  7. public function sub($a, $b);
  8. public function mul($arr);
  9. public function div($a,$b);
  10. }
  11. interface test {
  12. public const T =100;
  13. }
  14. abstract class Demo1 implements Demo, test
  15. {
  16. //未实现全部方法则用抽象类,抽象类中可包含抽象方法和实例方法,不能被实例化
  17. //抽象类可以对应多个接口,用“,”隔开
  18. //同名方法优先级 类同名方法>trait>继承成员方法
  19. public function sum($arr)
  20. {
  21. return array_sum($arr);
  22. }
  23. public function sub($a, $b)
  24. {
  25. }
  26. public function mul($arr){}
  27. public function div($a,$b){}
  28. }
  29. class Work extends Demo1
  30. {
  31. use t1, t2;
  32. public function sum($arr)
  33. {
  34. return array_sum($arr)+100;
  35. }
  36. public function sub($a, $b)
  37. {
  38. return $a - $b;
  39. }
  40. }
  41. $obj = new Work;
  42. echo $obj->sum([2, 34, 5]);
  43. $obj->dd('hello');

trait 功能组合实现多继承,给予类的语法,对类功能扩展,不能实例化

  1. trait t1{
  2. public function dd($data){
  3. var_dump($data);
  4. die;
  5. }
  6. }
  1. 后期静态绑定 static::
  1. class Car
  2. {
  3. private static function getName()
  4. {
  5. return 'car';
  6. }
  7. public static function run()
  8. {
  9. //self取决于定义类,不能动态绑定;如需动态绑定改用static,static被绑定调用的类,用于静态继承
  10. // return self::getName();
  11. return static::getName();
  12. }
  13. }
  14. class Benz extends Car{
  15. public static function getName()
  16. {
  17. return 'E300';
  18. }
  19. }
  20. echo Car::run();
  21. echo Benz::run();
  22. // $my = new Benz;
  23. // echo $my::run();

用final标识类在子类中不能被修改,self与static效果同
4.命名空间及USE的使用
全局成员有常量 命名函数 类(接口),会有命名冲突的问题

  1. namespace name1;
  2. class test{
  3. public static function show(){
  4. return __METHOD__;
  5. }
  6. }
  7. namespace name2;
  8. class test{
  9. public static function show(){
  10. return __METHOD__;
  11. }
  12. }
  13. echo test::show();
  14. //访问其他命名空间需加空间名,‘\’返回到根空间
  15. echo \name1\test::show();
  16. echo call_user_func(['name2\test', 'show']);
  17. //命名空间的函数>系统函数的同名函数

在框架入口文件中,可用as给use的文件夹起别名,不起别名默认最后一段
const DS= DIRECTORYSEPARATOR;
require _DIR
.DS.’autoload.php’;

  1. use app\controller as ac;
  2. use app\controller;
  3. echo ac\Index::index();
  4. echo controller\Login::index();

在自动加载时,要注意文件目录的设置,

  1. spl_autoload_register(function($className){
  2. // echo $className.'<hr>';
  3. $file = __DIR__.DS.'class'.DS.$className.'.php';
  4. $file = str_replace("\\",DIRECTORY_SEPARATOR,$className).'.php';
  5. if(is_file($file)&&file_exists($file)) require $file;
  6. // echo $file.'<hr>';
  7. // echo __DIR__;
  8. });
总结:

这段老师讲的比较乱,还是去自学消化吧!

【来源:国外高防服务器 http://www.558idc.com/stgf.html 欢迎留下您的宝贵建议】