PHP-php类成员变量初始化的问题?

PHP-php类成员变量初始化的问题?

清晨说ぺ晚安 发布于 2016-11-05 字数 413 浏览 1349 回复 3

示例代码如下:

class A
{
private $randNum = rand(1,100);
//private $randNum;

public function __construct()
{
//$this->randNum = rand(1,100);
}

public function getRandNum()
{
return $this->randNum;
}
}

$a = new A;
echo $a->getRandNum().PHP_EOL;

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瑾兮 2017-09-01 3 楼

PHP类中,若要初始化成员属性,那么成员属性的初始值必须是一个常数,如果不是常数(如变量),则会报错,所以,如果你要初始化就只能是在构造函数里进行初始化,不过你可以写一个方法,这样就可以在构造函数里批量初始化,不用写那么多的$this->变量名称,而且还支持非常数的初始化。这是最简单的,如果你还想增加访问控制,可以相对改一下就行了

 <?php
Class A{
function __construct(){
$vars = array(
'x' =>'china',
'y' => 'beijing',
'z' => rand(),
);
$this->initVar($vars);
}
function initVar($vars){
if(!empty($vars)){
foreach($vars as $var => $val){
$this->$var = $val;
}
}
}

function getVar($var){
return $this->$var;
}
}

$a = new A();
echo $a->getVar('z');
?>

瑾兮 2017-07-30 2 楼

在java中,习惯上一个类的构造函数会给一个无参的和一个全参的。
成员变量如果未进行初始化,习惯上会写好所有变量的set和get方法,到目前为止,还是感觉java的做法很规范,而php的做法总给人一种缺少零件的感觉。

夜无邪 2017-01-05 1 楼

初始化的变量以数组的形式传递进去,类的内部通过通过一个函数获取类的所有属性,通过一次循环进行变量的初始化,代码如下:

class A
{
private $var1;
private $var2;
private $var3;
private $var4;

public function __construct()
{
//$this->randNum = rand(1,100);
}

public function init($init = array())
{
foreach(get_class_vars(get_class($this)) as $self_var => $val) {
if(isset($init[$self_var])) {
$this->$self_var = $init[$self_var];
}
}
}
}

$a = new A;
$a->init(array('var1'=>2));