Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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 将_构造放在if()中_Php_Class_Oop_Constructor - Fatal编程技术网

Php 将_构造放在if()中

Php 将_构造放在if()中,php,class,oop,constructor,Php,Class,Oop,Constructor,有没有办法: class foo { private $skey; if(isset($_SESSION['some_val']) { function __construct(){ $skey = 'something'; } } } 如果$\u会话['some\u val']不存在,我只想创建$key(某物)的初始值 提前谢谢 编辑: 这就是我在你的帮助下所做的 function __construct() {

有没有办法:

class foo {
    private $skey;

    if(isset($_SESSION['some_val']) {
       function __construct(){ 
          $skey = 'something';
       }
    }
}
如果
$\u会话['some\u val']
不存在,我只想创建
$key
(某物)的初始值

提前谢谢

编辑:

这就是我在你的帮助下所做的

function __construct() {
    if(!isset($_SESSION['skey'])) {
    $tp = new Text_Password();
    $skey = $tp->create();
    $this->skey = $skey;
    $_SESSION['skey'] = $this->skey;
    }

}

你应该把它放在construct方法里面

class foo {
  private $key;

  public function __construct(){ 
     if(isset($_SESSION['some_val']) {
       $this->key = 'something';
     }
  }
}

不,那是不可能的。您可以这样做:

class foo {
   private $key;
   function __construct(){ 
      if (isset($_SESSION['some_val']) {
         $this->key = 'something';
      } else {
         $this->key = null;
      }
   }
}
或者更好的方法是,使用带参数的构造函数并将
$\u会话
内容留在主应用程序中:

class foo {
   private $key;
   function __construct($init = null){
       $this->key = $init;
   }
}
然后在主应用程序中:

if (isset($_SESSION['some_val'])) {
    $f = new foo('something');
} else {
    $f = new foo();
}

没有。但是,您可以简单地执行以下操作:

class foo {
  function __construct()
  { 
    if(isset($_SESSION['some_val']) 
    {
      $this->key = 'something';
    }
  }
}

不,不能有条件地声明类方法。从课堂设计的角度来说,这是一个糟糕的想法。为什么不在构造函数内部进行检查呢?类通常用于一般用途,因此专门将其绑定到
$\u SESSION
变量可能不是最好的方法。我这样做,因为实际上我正在尝试设置$key的值(如果它不存在),然后将其传递给一个$SESSION变量,然后我想检查$key是否已经设置好,如果没有,我需要生成一个。。。方法重载实际上在PHP中不起作用。您可以使用
function\uu构造($init=null)
来表示可选参数。您应该添加一个解释,说明如何使用工厂执行此操作,以及为什么可能使用工厂beneficial@tereško为什么?就目前而言,没有理由建立工厂,我也不是工厂方法模式的最大支持者。此外,根据本文,当所创建对象的结果类未知时,将使用它,但这里的情况并非如此。如果您认为这里需要工厂模式,只需将其作为一个答案发布即可。@BartFriederichs我说的是“工厂”(在单独的类中,它负责初始化和准备),而不是“工厂方法”。