登录  /  注册
博主信息
博文 38
粉丝 0
评论 0
访问量 28669
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
类的静态成员;接口、抽象类、trait ;后期静态绑定;命名空间
一个好人
原创
589人浏览过
  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. });

总结:

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

批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学