SAGEGSDAGESE
2016-05-08 18:26
calss car(){
public function $txt = "1"
function __construct($name){
echo "构造被调用";
$this->$name = $name
}
}
$a = new car(2);
$a->name;
这时候 应该是输出:
“构造被调用”
1
之后再加上下面的析构函数
function __destruct(){
echo "析构被调用".$txt
$b = new car(3);
$b->name;
这时候应该会输出
“构造被调用”
3
“析构被调用 2”
“析构被调用 3”
怎么说呢,感觉老师讲的那个Nbaplaror是这个顺序,我也不知道该怎么说了,我不明白的地方是为什么最后为什么输出了两次 "析构被调用" 并且把实例化$a时传的值也调出来了?
为什么在实例化$b的时候 $a时传的值还在
这和静态方法有关吗?其原理是什么
析构函数,在实例化的时侯会被自动调用,你实例化了两个对象,会调用两次析构函数,这理解是对的。
对于代码的是幕客网提供的编辑器,在你输入内容的左上角有代码语言可以选择,选择了对应的语言就会根据语言提供高亮显示效果。
<code>
class car{
public $name;
function __construct( $name )
</code>
<pre>
class car{
public $name;
function __construct( $name )
</pre>
你的代码完全无法执行,定义个类不是类的方法,
calss car(){ }
类的定义不应该是:
class car{ } 它不是个函数不应该有()小括号。
你定义的属性不是成员属性不是成员属性,成员方法不是成员方法,并且PHP基本的语法,结束的分号“ ; ”也多处没有写上 :
public function $txt = "1"
看你的写法应该是想定义属性的,那么就应该是这样写:
public $txt = "1";
你的构造函数$name这个属性在定义成为属性的时侯并没有定义过,这样的话在势例子化对象的时间,构造函数根本就不动$name是个什么对象,报 Notice: Undefined property: car::$name 这个属性没有定义!
function __construct($name){ echo "构造被调用"; $this->$name = $name //这里的分号你又没有写,并且$name这个属性并没有定义。 } //在类的内部调用成员属性,要输出要在前面加个 echo 输出出来
下面是修改的代码:
class car{ public $txt = "1"; public $name; function __construct($name) { echo "构造被调用"; echo $this->$name = $name; } }
看你的代码,我想你的意图应该是想默认初始化对象是$name
="1",然后实例化对象的时侯根据你传的值修改默认值成为2,然后再实例化1个对象$name
值为3吧。
class car{ public $name; function __construct( $name ) { echo "构造被调用<br />"; echo $this->name = $name . "<br />"; } } $a = new car(2); echo $a->name; $b = new car(3); echo $b->name;
拼接了个<br />是在为了在浏览器显示换行,方便看清楚效果。
建议你想将php的基本的语法先掌握再深入学习,效果应该会好些。
你这代码乱的我完全看不明白,但是你的问题我可以大概的回答你
为什么输出了两次 "析构被调用" 是因为析构函数在变量摧毁时就会运行,每次代码运行结束就会调用,所以你这里是两次
静态方法有关吗?其原理是什么 静态方法关键词是static,在你的代码里我并没有看到静态方法的运用
PHP面向对象编程
70153 学习 · 361 问题
相似问题