PHP-php类成员变量初始化的问题?
示例代码如下:
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;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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');
?>
在java中,习惯上一个类的构造函数会给一个无参的和一个全参的。
成员变量如果未进行初始化,习惯上会写好所有变量的set和get方法,到目前为止,还是感觉java的做法很规范,而php的做法总给人一种缺少零件的感觉。
初始化的变量以数组的形式传递进去,类的内部通过通过一个函数获取类的所有属性,通过一次循环进行变量的初始化,代码如下:
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));