<?php
class Person
{
var $name;
var $sex;
var $age;function _construct($name, $sex, $age)
{$this->name=$name;$this->sex=$sex;$this->age=$age;
}function say()
{
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄
是:".$this->age."<br>";
}
}$p1=new Person("张三","男", 20);
$p2=new Person("李四","女", 30);
$p3=new Person("王五","男", 40);$p1->say();$p2->say();$p3->say();
?>正确的输出结果:我的名子叫:张三性别:男我的年龄是:20
我的名子叫:李四性别:女我的年龄是:30
我的名子叫:王五性别:男我的年龄是:40我输出的结果是:我的名子叫: 性别: 我的年龄是:
我的名子叫: 性别: 我的年龄是:
我的名子叫: 性别: 我的年龄是:不知道是哪里的问题 请教大家

解决方案 »

  1.   

    __construct和_construct是不一样的
      

  2.   

    构造函数__construct,你少了下划线!
      

  3.   

    ok,确实是少个下划线,我是一点基础都没有的,所以这些基本的东西有许多都不知道,接下来还有问题:<?php
    class Person
    {
    var $name;
    var $sex;
    var $age;function __construct($name, $sex, $age)
    {$this->name=$name;$this->sex=$sex;$this->age=$age;
    }function say()
    {
    echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄
    是:".$this->age."<br>";
    }
    function __destruct()
    {
    echo"再见".$this->name."<br>";
    }
    }$p1=new Person("张三","男", 20);
    $p2=new Person("李四","女", 30);
    $p3=new Person("王五","男", 40);$p1->say();$p2->say();$p3->say();?>关键是后面的问题,正确结果是:我的名子叫:张三性别:男我的年龄是:20
    我的名子叫:李四性别:女我的年龄是:30
    我的名子叫:王五性别:男我的年龄是:40
    再见张三
    再见李四
    再见王五但我的结果是这样的:
    我的名子叫:张三 性别:男 我的年龄是:20
    我的名子叫:李四 性别:女 我的年龄是:30
    我的名子叫:王五 性别:男 我的年龄是:40
    再见王五
    再见李四
    再见张三后面的“王五”“李四”“张三”跟正确的结果是倒过来的,怎么回事
      

  4.   

    你的"正确结果"是哪里的?书上的?
    一般来说,我们管运行出来的结果叫做"正确结果"  :)看一下手册: http://www.php.net/manual/en/language.oop5.decon.php这个程序结束时对象的销毁次序是不确定的(应该取决于具体实现),所以你们都是正确的
      

  5.   


    //你要了解__destruct()是被摧毁之前才执行$p1=new Person("张三","男", 20);
    $p2=new Person("李四","女", 30);
    $p3=new Person("王五","男", 40);$p1->say();$p2->say();$p3->say();//完成整个页面,php的回收机制自动摧毁了全部实例,所以才有先进后出(堆栈)
    //你可以这样
    $p1=new Person("张三","男", 20);
    $p2=new Person("李四","女", 30);
    $p3=new Person("王五","男", 40);$p1->say();
    unset($p1);
    $p2->say();
    unset($p2);
    $p3->say();
    unset($p2);
    //这样每摧毁一次实例都执行虚构函数