php面试进阶

1、yield 核心原理是什么
    https://blog.csdn.net/qq_20329253/article/details/52202811/
    https://www.jianshu.com/p/78cb20f4b0f4
    使用场景:PHP开发很多时候都要读取大文件,比如csv文件、text文件,或者一些日志文件。这些文件如果很大,比如5个G。这时,直接一次性把所有的内容读取到内存中计算不太现实

    set_time_limit(0);
    $a = memory_get_usage();

    function getTexts()
    {
        $file_path = "aa.log"; //130M
        $fd = fopen($file_path,"rb");
        while(!feof($fd))
        {
            yield fgets($fd);
        }
    }

    foreach( getTexts() as $val)
    {
        echo '<pre>';
        // print_r($val);
    }

    $b = memory_get_usage();
    var_dump($b-$a);

2、echo print  print_r var_dump区别

echo()
可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。

print()
函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。

print_r()
可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。但print_r()输出布尔值和NULL的结果没有意义,因为都是打印"\n"。因此用var_dump()函数更适合调试。

var_dump()
判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

3 empty isset is_null区别

变量emptyis_nullisset
$a=””truefalsetrue
$a=nulltruetruefalse
var $atruetruefalse
$a=array()truefalsetrue
$a=falsetruefalsetrue
$a=15falsefalsetrue
$a=1falsefalsetrue
$a=0truefalsetrue
$a=”0”truefalsetrue
$a=”true”falsefalsetrue
$a=”false”falsefalsetrue

 

1.is_null

<span style="font-size:18px;">//is_null
var_dump(is_null($a));//报错,且返回true
$age;
var_dump(is_null($age));//报错,且返回true
$age = null;
var_dump(is_null($age));//true
$mengyunzhi = 1;
var_dump(is_null($mengyunzhi));//false</span>
有以上代码可以看出,我们一般用is_null来判断已存在的变量的值是否为null。
2.isset

<span style="font-size:18px;">//isset
var_dump(isset($meng));//false
$yun = null;
var_dump(isset($yun));//false
$zhi = 1;
var_dump(isset($zhi));//true</span>
isset用来判断变量是否存在或者为null。细心的你可能会发现一个有趣的现象,只要is_null为true,isset就为false,反之亦然。
3.empty

<span style="font-size:18px;">//empty
$mengyun = 1;
var_dump(empty($mengyun));//false
$test = null;
var_dump(empty($test));//true
$test = '0';
var_dump(empty($test));//true
var_dump(empty($char));//true</span>
empty用来判断变量存在,且值不为0,‘0’,null,false,array()等等。

 

5、抽象类和接口的异同

1. 相同点:

(1)      两者都是抽象类,都不能实例化。

(2)      interface 实现类及 abstractclass 的子类都必须要实现已经声明的抽象方法。

2. 不同点:

(1)      interface 需要实现,要用 implements ,而 abstractclass 需要继承,要用 extends 。

(2)      一个类可以实现多个 interface ,但一个类只能继承一个 abstractclass 。

(3)      interface 强调特定功能的实现,而 abstractclass 强调所属关系。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值