升级 php7 后 isset 不太对了
公司升级 php7 后出现了一个问题
类似这样 isset($post->user->name) 始终为 false
之前的 php 5.6 就很正常
laravel 版本是 5.1.35(很久没升级了)
先看看 isset
isset 用来检测变量是否设置
首先我们来看官方的一个例子
大致上是下面这个意思
<?php
class Post
{
protected $attributes = ['content' => 'foobar'];
public function __get($key)
{
if (isset($this->attributes[$key])) {
return $this->attributes[$key];
}
}
}
$post = new Post();
echo isset($post->content); // false
上面这个例子将永远返回 false,因为 foo 并不是 Post 的属性,而是 __get 取出来的
魔术方法 __isset
那么怎么解决上面那个问题呢?使用魔术方法
<?PHP
class Post
{
protected $attributes = ['content' => 'foobar'];
public function __get($key)
{
if (isset($this->attributes[$key])) {
return $this->attributes[$key];
}
}
public