Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是公认的和/或安全的PHP习惯用法吗?_Php - Fatal编程技术网

这是公认的和/或安全的PHP习惯用法吗?

这是公认的和/或安全的PHP习惯用法吗?,php,Php,我在另一个SE站点的一些代码中发现这个函数被认为是“好的” public static function init() { is_null( self::$instance ) AND self::$instance = new self; return self::$instance; } 有人能用英语给我解释一下这句话吗 is_null( self::$instance ) AND self::$instanc

我在另一个SE站点的一些代码中发现这个函数被认为是“好的”

public static function init()
        {
            is_null( self::$instance ) AND self::$instance = new self;
            return self::$instance;
        }
有人能用英语给我解释一下这句话吗

is_null( self::$instance ) AND self::$instance = new self;

我不想听到你为什么认为单身汉不好。我知道这段代码是为了返回包含类的实例而设计的,但我不知道如何读取这一行。
self::$instance=newself的结果是什么

self::$instance=新self的结果是静态
$instance
变量由当前对象初始化(因为它事先不存在)。

self的结果::$instance=new self是静态
$instance
变量由当前对象初始化(因为它事先不存在)。

这是一个非常干净的代码。 行首先测试单例是否已经存在,如果已经存在则返回。如果没有,则创建一个新实例,存储在Singleton类静态实例属性中并返回

使用
运算符可能会在非常规表示法方面遇到困难。但这是非常有效的PHP代码:
后面的部分只有在前面的条件为true时才会执行,所以在这种情况下如果不存在对象


构造
self::$instance=new self
的赋值结果(返回值)在这里不相关。它已经完成了它的职责,对象被创建了。我个人更喜欢这种结构写在背景中。但一般来说,赋值运算符在以这种方式求值时也有一个返回值。这就是为什么您还可以使用以下结构生成非常干净的代码:
if(FALSE==($result=action()){do_something();}

这是非常干净的代码。 行首先测试单例是否已经存在,如果已经存在则返回。如果没有,则创建一个新实例,存储在Singleton类静态实例属性中并返回

使用
运算符可能会在非常规表示法方面遇到困难。但这是非常有效的PHP代码:
后面的部分只有在前面的条件为true时才会执行,所以在这种情况下如果不存在对象


构造
self::$instance=new self
的赋值结果(返回值)在这里不相关。它已经完成了它的职责,对象被创建了。我个人更喜欢这种结构写在背景中。但一般来说,赋值运算符在以这种方式求值时也有一个返回值。这就是为什么您还可以使用以下结构生成非常干净的代码:
if(FALSE==($result=action()){do_something();}

这基本上意味着如果
self:$instance
null
,则创建
self:$instance

更详细的方法是:

if(is_null(self::$instance)){
    self::$instance = new self;
}

为了回答您的实际问题,
self::$instance=newself
应该是
true
,但这并不重要,因为我们只是用它来分配变量本身。

这基本上意味着如果
self:$instance
null
,则使
self:$instance
成为新的self

更详细的方法是:

if(is_null(self::$instance)){
    self::$instance = new self;
}

为了回答您的实际问题,
self::$instance=newself
应该是
真的
,但这并不重要,因为我们只是用它来分配变量本身。

我想这就是我遇到的问题。我的意思是“除了”。我的大脑期望整条线成为一个条件,即使下半部分是一个作业。这里到底是什么意思?@codecowboy,
这里只是确保,如果
self::$instance
为空,我们只分配
新的self
。你的直觉是正确的:它是某种条件形式。这就是它起作用的原因。假设这一行是if语句中的条件行:AND运算符是通过首先计算其剩余部分来计算的。仅当该值为真(满足条件)时,才计算右侧零件。这就是这里所需要的:如果单例已经存在,则不希望创建新对象。所以我称之为条件运算符的巧妙用法。更常见的情况是使用
运算符:
do_something()或exit('failed!')我觉得它简洁易懂。我想是时候换工作了。但是谢谢!程序员使用的风格确实不同。一些人认为这更具可读性,其他人则更喜欢不同的符号。我想说,这是一件好事,它有多种多样。我反对那些声称只有一种方法可以把事情做好的人。:-)对我来说,这段文字看起来很干净,也很容易阅读。我想这就是我绊倒的地方。我的意思是“除了”。我的大脑期望整条线成为一个条件,即使下半部分是一个作业。这里到底是什么意思?@codecowboy,
这里只是确保,如果
self::$instance
为空,我们只分配
新的self
。你的直觉是正确的:它是某种条件形式。这就是它起作用的原因。假设这一行是if语句中的条件行:AND运算符是通过首先计算其剩余部分来计算的。仅当该值为真(满足条件)时,才计算右侧零件。这就是这里所需要的:如果单例已经存在,则不希望创建新对象。所以我称之为条件运算符的巧妙用法。更常见的情况是使用
运算符:
do_something()或exit('failed!')我觉得它简洁易懂。我想是时候换工作了。但是谢谢!程序员使用的风格确实不同。一些人认为这更具可读性,其他人则更喜欢不同的符号。有一个var是一件好事