2021年PHP-Laravel面试题问卷题 答案记录

忘是亡心i 2023-09-28 17:35 183阅读 0赞

1. PHP的哪些语言特征,在合适的场景可以显著减少程序的内存开销?

  • Generator
  • Trait
  • Type hint
  • SPL

解析

Generator 生成器具体详解可以参考:
https://blog.51cto.com/chinalx1/2089327
如果不考虑用Generator来实现协程,那么Generator的一个最大的作用就是为含有大量数据的集合(当前这些数据集是规则的,就像range所返回的那些数据)的遍历节省空间
Trait 详细了解参考https://blog.csdn.net/lemony521/article/details/78322652
是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。
Type hint 类型提示
从PHP5开始,我们可以使用类型提示来指定定义函数时,函数接收的参数类型。如果在定义函数时,指定了参数的类型,那么当我们调用函数时,如果实参的类型与指定的类型不符,那么PHP会产生一个致命级别的错误(Catchable fatal error)。
SPL PHP标准库
SPL,PHP 标准库(Standard PHP Library) ,从 PHP 5.0 起内置的组件和接口,并且从 PHP5.3 已逐渐的成熟。SPL 其实在所有的 PHP5 开发环境中被内置,同时无需任何设置。

2. 对于PHP的自动加载描述正确的是

  • 自动加载函数只支持按Class / Interface / Trait 名加载,不能按 function名加载
  • Composer的自动加载是通过 __autoload 函数实现的
  • 在文件顶部 use 的时候会载入对应的类
  • 现在大多数类库都遵循PSR0 规范

解析:

自动加载的主要实现方式 __autoload 与 SPL 标准库提供的spl_autoload_register 函数两种,目前主流多是后一种。
两种方式的详解介绍可以参考:
https://www.jb51.net/article/166979.htm
https://www.jb51.net/article/31279.htm
spl_autoload_register 函数用法就是装载自定义的加载函数,所以自动加载函数能按function名加载。
Composer的自动加载是通过 __autoload 函数实现的
在文件顶部 use 的时候会载入对应的类
这里并不是,只用在具体调用类时才会加载类,lazy loading的意思。
可以参考:
https://blog.csdn.net/weixin_39610956/article/details/115148899
现在大多数类库都遵循PSR0 规范
PSR0实际是对实现自动加载的一种规范标准,PSR4是对PSR0的一些补充,简单说目前大多项目都会使用autoload自动加载机制,那么遵循PSR0规范也是必然的

3. 对于 Trait 描述正确的是

  • 子类中引入的 Trait 里的方法会覆盖父类的方法
  • 在Trait中不可以调用引用类里的方法
  • 一个类无法同时引入两个包含相同方法的 Trait
  • 可以用来减少重复代码

解析:

关于Trait 的介绍在第一题中有链接可以阅读学习下。
子类中引入的 Trait 里的方法会覆盖父类的方法
这是正确的,Trait的优先级:自身方法>trait的方法>继承的方法
在Trait中不可以调用引用类里的方法
这是错误的!
代码如下:

  1. trait HelloWorld{
  2. public function sayHello(){
  3. echo 'hello';
  4. }
  5. public function traitDemo(){
  6. echo 'this trait';
  7. $this->demo();
  8. }
  9. }
  10. class TestTrait
  11. {
  12. use HelloWorld;
  13. public function demo(){
  14. echo 'demo';
  15. }
  16. }
  17. $obj = new TestTrait();
  18. $obj->traitDemo();
  19. // 会输出 this trait demo

一个类无法同时引入两个包含相同方法的 Trait
这是错误的!
Trait 可以引入多个, 多个trait中存在同名方法时, 需要指定使用哪个方法,可用 insteadof 指定使用哪个方法替代同名方法或者是 as 取别名
Trait 的使用小细节可以参考:
https://blog.csdn.net/xiantianga6883/article/details/118576345
可以用来减少重复代码 这是Trait的主要目的,提供了灵活的代码复用机制。

<

发表评论

表情:
评论列表 (有 0 条评论,183人围观)

还没有评论,来说两句吧...

相关阅读