相关疑难解决方法(0)

双问号(??运算符)在PHP中意味着什么

我正在深入研究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 operator-keyword

129
推荐指数
3
解决办法
4万
查看次数

PHP简写概述

我已经用PHP编程多年了,但我从来没有学过如何使用任何速记.我不时在代码中遇到它并且很难阅读它,所以我想学习该语言存在的不同简写,以便我可以阅读它并开始使用它来节省时间/行,但是我似乎无法全面了解所有速记.

谷歌搜索几乎只显示if/else语句的简写,但我知道必须有更多.

简而言之,我说的是:

($var) ? true : false;
Run Code Online (Sandbox Code Playgroud)

php shorthand

34
推荐指数
4
解决办法
4万
查看次数

PHP ??、?: 和 ??= 之间的区别

我不太清楚, PHP 中的???:和有何??=不同?

我知道??=是在PHP7.4中才添加的。我也知道这??是为了检查空值,但?:似乎也检查空值,所以我不完全确定其中的区别。

php

9
推荐指数
1
解决办法
4491
查看次数

PHP中的安全导航操作符?

有没有办法用某种安全导航操作符编写以下语句?

echo $data->getMyObject() != null ? $data->getMyObject()->getName() : '';
Run Code Online (Sandbox Code Playgroud)

所以它看起来像这样:

echo $data->getMyObject()?->getName();
Run Code Online (Sandbox Code Playgroud)

php

6
推荐指数
3
解决办法
1953
查看次数

PHP替代三元运算符

在JavaScript中,您可以使用以下代码:

var = value || default;
Run Code Online (Sandbox Code Playgroud)

除了三元运算符之外,PHP中是否存在等价物:

$var = ($value) ? $value : $default;
Run Code Online (Sandbox Code Playgroud)

区别只是要写$value一次?

javascript php ternary-operator

5
推荐指数
2
解决办法
831
查看次数

新的 PHP7“空合并”运算符给出了未定义的索引通知?

在 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)等时的类似通知。

php

5
推荐指数
0
解决办法
818
查看次数

使用客户端变量加载文件

我需要在容器中加载一个文件,但是使用一个参数 - 首先从数据库中获取一些数据:

$('#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从客户端.可能吗?

javascript php jquery

4
推荐指数
1
解决办法
53
查看次数

为什么PHP isset和Null合并运算符抛出带连接运算符的注意事项?

我已经读过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)

php php-7

1
推荐指数
1
解决办法
539
查看次数

什么是 ”??” 刀片模板中的符号

我找到了这个 ”??” 资源中的符号 > ... > 在电子邮件输入字段中重置。

是行程运营商还是什么?。

{{ $email ?? old('email') }}
Run Code Online (Sandbox Code Playgroud)

laravel laravel-blade

0
推荐指数
1
解决办法
606
查看次数