我已经按照这里经常推荐的教程Build a PHP MVC Application进行了操作,然后我遇到了一行代码,它是使用?
和:
缩短的if语句。由于我对这种短代码并不熟悉,所以我试着重新创建它,我会怎么写它。
$this->params = $url ? array_values($url) : [];
我想出了:
if(isset($url))
{
$this->params = array_values($url);
}
这是完全相同的吗?或者我错过了什么?它起作用,看起来它也在做同样的事情,但我想肯定地知道。
由于某些答案取决于$ url的状态,因此这里是完整的代码:
<?php
class App
{
protected $controller = 'home';
protected $method = 'index';
protected $params = [];
public function __construct()
{
$url = $this->parseUrl();
if(file_exists('../app/controllers/' . $url[0] . '.php'))
{
$this->controller = $url[0];
unset($url[0]);
}
require_once '../app/controllers/' . $this->controller . '.php';
$this->controller = new $this->controller;
if(isset($url[1]))
{
if(method_exists($this->controller, $url[1]))
{
$this->method = $url[1];
unset($url[1]);
}
}
$this->params = $url ? array_values($url) : [];
call_user_func_array([$this->controller, $this->method], $this->params);
}
public function parseUrl()
{
if(isset($_GET['url']))
{
return $url = explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
}
}
}
答案 0 :(得分:3)
if (isset($url))
将检查是否存在设置变量。
if ($url)
将检查变量本身的真值。
您应该使用if ($url)
顺便说一下,您不熟悉的代码称为ternary statement!它在其他一些语言(例如Ruby)中很常见,了解它的工作方式很有用。
如果你不知道我对真实价值的看法,你应该阅读更多关于boolean casting的内容。
答案 1 :(得分:1)
最简洁的方式是:
$this->params = [];
if($url) {
$this->params = array_values($url);
}
或者
if($url) {
$this->params = array_values($url);
}
else {
$this->params = [];
}
它被称为三元声明。 [value] = [condition] ? [if true] : [else]
。
答案 2 :(得分:1)
相当于:
if(isset($url))
{
$this->params = array_values($url);
} else {
$this->params = [];
}
答案 3 :(得分:1)
Php
isset
用于检查variavble
是否为defined
。它只是return
true
而基于variable
的错误是定义与否。
有关isset
的详情,请参阅http://php.net/manual/en/function.isset.php
另一方面ternary
opreators
只是if-else
的简短形式,写起来更方便
Ternary operators
,那么 multiple conditions
是有用的,而不是使用多个if-else
,你可以使用ternary
,就像看到这个例子一样
$data= ($value== 1) ? "one" : (($value== 2) ? "two" : "other");
你可以在这个
中连接多个条件