有没有办法将php变量定义为一个或另一个就像你var x = (y||z)
在javascript中一样?
Run Code Online (Sandbox Code Playgroud)var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
我正在发送一个post变量,我想存储它以供以后在会话中使用.我想要完成的是设置$x
为$_POST['x']
(如果存在的话)的值,然后检查并使用$_SESSION['x']
它是否存在,$x
如果它们都没有设置则保留undefined;
$x = ($_POST['x'] || $_SESSION['x');
Run Code Online (Sandbox Code Playgroud)
根据http://php.net/manual/en/language.operators.logical.php
$ a = 0 || "阿瓦克"; 打印"A:$ a \n";
将打印:
答:1
在PHP中 - 而不是像Perl或JavaScript这样的语言打印"A:avacado".
这意味着你不能使用'||' 运算符设置默认值:
$ a = $ fruit || '苹果';
相反,你必须使用'?:'运算符:
$ a =($ fruit?$ fruit:'apple');
所以我必须使用额外的,如果封装?:操作如下:
if($_POST['x'] || $_SESSION['x']){
$x = ($_POST['x']?$_POST['x']:$_SESSION['x']);
}
Run Code Online (Sandbox Code Playgroud)
或同等的工作:
if($_POST['x']){
$x=$_POST['x']; …
Run Code Online (Sandbox Code Playgroud) 如果可用,我希望能够使用use
该特性。
显然我不能在类本身内部定义它(语法错误)
//fails
include_once('myTrait.php');
class foo
{
var $bar;
if (trait_exists('myTrait')) {
use myTrait;
}
}
//also fails
foo use myTrait;
//also fails
$f = new foo();
$f use myTrait;
//also fails
$f = new foo() use myTrait;
Run Code Online (Sandbox Code Playgroud)
理想的情况是这样的:
class foo
{
var $bar;
}
if (file_exists('myTrait.php')) {
include_once('myTrait.php');
//make class foo use myTrait;
}
$f=new foo();
Run Code Online (Sandbox Code Playgroud)
很难找到文档和特征似乎不是很受欢迎,但在我的特殊情况下,它们非常有用。我还尝试通过仅在需要时包含文件来尽可能降低资源。
像往常一样欢迎提示、文档和解释。
我的搜索带给我的最接近的是这篇文章http://brendan-bates.com/traits-the-right-way/
假设其中一些控制器(但不是全部)需要数据库连接。为了保持性能,我们不应该为每个控制器提供数据库连接。我们可以做的是编写一个抽象类,它扩展了提供数据库连接的 BaseController。但是,将来,如果不是控制器的对象需要数据库连接怎么办?我们可以使用水平重用,而不是复制这个逻辑。
可以创建一个简单的特征:
Run Code Online (Sandbox Code Playgroud)trait DatabaseAware { protected $db; public function setDatabase($db) { $this->db = $db; } …