3g微网站是什么徐州圣道网络科技有限公司
概况
三元运算符的功能与“if…else”流程语句一致。
在一般情况下,三元操作替换if条件语句可以精简代码,并且更为直观,但是在下面的情况中使用三元操作将会返回警告。
借图:

案例
比如原代码:
class classA{public static function &get_instance($param='')	{...		if(isset(self::$_instance->$param)){return self::$_instance->$param;}else{return NULL;}	}
}
 
而一旦改写三元操作的时候:
class classA{public static function &get_instance($param='')	{...		return isset(self::$_instance->$param) ? self::$_instance->$param : NULL;}
}
 
系统会提示:
 PHP Notice: Only variable references should be returned by reference in...
分析
为什么呢?
- 为什么第一种写法正确? 
- 函数声明为返回引用
 - 对象属性也是引用
 - 如果
$param为空,直接返回对象实例,即返回一个对象引用 - 否则使用
if分支,每个分支都返回对象属性引用或NULL,都符合引用要求 
 - 为什么第二种写法出错? 
- 问题在使用三元操作符
 - 三元操作符
整体返回一个值,而不是引用 - 此时虽然内容是属性,但类型上仍是个值而不是引用
 - 所以不匹配函数声明为返回引用这个要求
 
 
总结
- 函数声明返回引用,每个返回节点都必须返回真正的变量引用
 - 第一种用
if分支,每个分支都返回引用 - 第二种三元操作符整体返回一个值,就算内容是引用也不算
 - 所以正确应该是第一种if分支写法,而不是使用三元操作符。
 
NULL本身不是一个变量,所以严格来说返回NULL也不算返回变量引用。
但是NULL作为一个特殊值,它可以作为非引用值正常返回,不会报错。

