理解__construct($ foo = null)并检查$ foo是否为真

时间:2017-09-20 10:03:01

标签: php oop

当我们用null初始化它时$mysettings如何才能成立?这是一种防止SQL注入的方法吗?如果您能解释下面的代码,将不胜感激。

public function __construct($mysettings = null)
{
    $this->shop_version = Mage::getVersion();
    $this->moduleversion = Mage::getConfig()->getModuleConfig('Messagemodule')->version;
    $this->apppid = Mage::getStoreConfig('magemessage/appId');
    if (empty($this->apppid)) {
        $this->apppid = 'no-appId';
    }
    $this->connectortype = ($settingvariable = Mage::getStoreConfig('Messagemodule/magemessage/connector', 0)) ? $settingvariable : 'auto';
    if ($mysettings) {
        $this->connectortype = $mysettings;
    }
}

2 个答案:

答案 0 :(得分:2)

当您在PHP方法(包括构造函数)中指定默认值时,它就是 - 默认

所以,如果你有

class Foo {
  public function __construct($mysettings = null) {
    ...
  }
}

然后你提供了两种构建类的方法。你可以打电话

$foo = new Foo();

没有参数,在这种情况下$mysettings将初始化为null。或者你可以打电话

$settings = array('key' => 'value');
$foo = new Foo($settings);

在这种情况下,$settings数组将被传递到新实例中。这样做的好处是,您不需要为不需要自定义设置的新实例提供空数组;你可以省略这个论点。

类中的检查if ($mysettings)...确保仅在提供设置时才使用这些设置 - PHP if语句可以在许多不同类型上运行,而不仅仅是布尔值。在这种情况下,如果变量为null,则条件将计算为false。

答案 1 :(得分:1)

看一下这段代码:

<?php

function required($something)
{
    echo $something;
}

required();

它会引发致命错误,因为$something是必需的,但未通过。 https://3v4l.org/fIKB9

现在看这里:

<?php

function required($something = 'hello')
{
    echo $something;
}

required();
required(' R.Toward');

哪个输出Hello R.Toward https://3v4l.org/nQF8r

所以从本质上讲,它是一种设置默认可选值的方法。