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我说的是“工厂”(在单独的类中,它负责初始化和准备),而不是“工厂方法”。