我正在深入研究Symfony framwork(版本4)代码并发现代码的和平:
$env = $_SERVER['APP_ENV'] ?? 'dev';
Run Code Online (Sandbox Code Playgroud)
我不太确定这实际上是做什么但我想它扩展到类似的东西:
$env = $_SERVER['APP_ENV'] != null ? $_SERVER['APP_ENV'] : 'dev';
Run Code Online (Sandbox Code Playgroud)
或者可能:
$env = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : 'dev';
Run Code Online (Sandbox Code Playgroud)
有人对这个问题有任何精确性吗?
编辑:
对于回答问题的所有人:谢谢所有标记我的问题的人都是否定的,因为已经存在类似的问题(PHP三元运算符vs null合并运算符):
确实,这两个问题非常相似.然而,每个人都很难想象"??" 被称为合并运算符.
否则我可以在官方文档上轻松找到它:
http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
但是,对于那些不知道在php 7中添加了此功能的人来说,更有可能输入:
"php ?? operator"或"php double question mark operator"
这就是为什么我的问题具有附加价值的原因.
我请你,重新考虑你的负面反馈.谢谢
此致,Epixilog
我已经用PHP编程多年了,但我从来没有学过如何使用任何速记.我不时在代码中遇到它并且很难阅读它,所以我想学习该语言存在的不同简写,以便我可以阅读它并开始使用它来节省时间/行,但是我似乎无法全面了解所有速记.
谷歌搜索几乎只显示if/else语句的简写,但我知道必须有更多.
简而言之,我说的是:
($var) ? true : false;
Run Code Online (Sandbox Code Playgroud) 我不太清楚, PHP 中的??、?:和有何??=不同?
我知道??=是在PHP7.4中才添加的。我也知道这??是为了检查空值,但?:似乎也检查空值,所以我不完全确定其中的区别。
有没有办法用某种安全导航操作符编写以下语句?
echo $data->getMyObject() != null ? $data->getMyObject()->getName() : '';
Run Code Online (Sandbox Code Playgroud)
所以它看起来像这样:
echo $data->getMyObject()?->getName();
Run Code Online (Sandbox Code Playgroud) 在JavaScript中,您可以使用以下代码:
var = value || default;
Run Code Online (Sandbox Code Playgroud)
除了三元运算符之外,PHP中是否存在等价物:
$var = ($value) ? $value : $default;
Run Code Online (Sandbox Code Playgroud)
区别只是要写$value一次?
在 PHP7+ 中有这个新的“空合并运算符”。- http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op 它说:
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
Run Code Online (Sandbox Code Playgroud)
在这种情况下,为什么此代码会导致错误/通知:
$username = (int)($_GET['user']) ?? 'nobody';
Run Code Online (Sandbox Code Playgroud)
注意:未定义索引:用户
这是预期的行为(如果是这样,它是否违背了该运算符的目的)?更改(int)为(string)等时的类似通知。
我需要在容器中加载一个文件,但是使用一个参数 - 首先从数据库中获取一些数据:
$('#story').load('test.php');
Run Code Online (Sandbox Code Playgroud)
test.php的
$st = $db->query("select * from users where id = " . $id);
... processing variables... load the finished content
Run Code Online (Sandbox Code Playgroud)
在这里,我需要$id从客户端.可能吗?
我已经读过PHP isset和null合并运算符用于忽略PHP注意:未定义的索引:
我已经看到这篇文章也是 PHP三元运算符vs null合并运算符
但是我在使用字符串连接运算符的同时使用它们获取PHP通知:
<?php
$array = ['a'=>'d'];
$c = $array['c'] ?? '';
$d = isset($array['c']) ? $array['c'] : '';
$val = "sgadjgjsd".$array['c'] ?? ''; // PHP Notice: Undefined index: c in /home/cg/root/986045/main.php on line 6
$val2 = "sgadjgjsd".isset($array['c']) ? $array['c'] : ''; // PHP Notice: Undefined index: c in /home/cg/root/986045/main.php on line 7
?>
Run Code Online (Sandbox Code Playgroud)
编辑:
我知道这可以通过以下方法解决
1)分配给变量
$val = "sgadjgjsd".$c = $array['c'] ?? '';
Run Code Online (Sandbox Code Playgroud)
2)使用@
$val = "sgadjgjsd".@$array['c'] ?? '';
Run Code Online (Sandbox Code Playgroud)
3)添加括号(和Karsten建议的那样)
$val = "sgadjgjsd".($array['c'] ?? ''); …Run Code Online (Sandbox Code Playgroud) 我找到了这个 ”??” 资源中的符号 > ... > 在电子邮件输入字段中重置。
是行程运营商还是什么?。
{{ $email ?? old('email') }}
Run Code Online (Sandbox Code Playgroud)