 
		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面向对象编程
70203 学习 · 369 问题
相似问题