ddxiami

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3011|回复: 3

[细说PHP] 第10章PHP面向对象的程序设计--通过类实例化对象

[复制链接]
发表于 2013-8-5 16:29:12 | 显示全部楼层 |阅读模式
类的实例化及对成员的访问

<?php
        /**
                声明一个人类Person,其中包含三个成员属性和两个成员方法
        */
        class Person {
                //下面是声明人的三个成员属性
                var $name;                                       //第一个成员属性$name定义人的名字
                var $sex;                                        //第二个成员属性$sex定义人的性别
                var $age;                                        //第三个成员属性$age定义人的年龄

                //下面是声明人的两个成员方法
                function say() {                                  
                        echo "这个人在说话<br>";        //在说话的方法体中可以有更多内容
                }               

                function run() {                            
                        echo "这个人在走路<br>";        //在走路的方法体中可以有更多内容
                }               
        }

        //下面三行通过new关键字实例化person类的三个实例对象
        $person1 = new Person();                          //通过类Person创建第一个实例对象$person1
        $person2 = new Person();                          //通过类person创建第二个实例对象$person2
        $person3 = new Person();                          //通过类person创建第三个实例对象$person3

        //下面三行是给$person1对象中属性初始化赋值
        $person1->name = "张三";                         //将对象person1中的$name属性赋值为张三
        $person1->sex = "男";                             //将对象person1中的$sex属性赋值为男
        $person1->age = 20;                             //将对象person1中的$age属性赋值为20

        //下面三行是给$person2对象中属性初始化赋值
        $person2->name = "李四";                     //将对象person2中的$name属性赋值为李四
        $person2->sex = "女";                        //将对象person2中的$sex属性赋值为女
        $person2->age = 30;                          //将对象person2中的$age属性赋值为30

        //下面三行是给$person3对象中属性初始化赋值
        $person3->name = "王五";                     //将对象person3中的$name属性赋值为王五
        $person3->sex = "男";                        //将对象person3中的$sex属性赋值为男
        $person3->age = 40;                          //将对象person3中的$age属性赋值为40
       
        //下面三行是访问$person1对象中的成员属性
        echo "person1对象的名字是:".$person1->name."<br>";         
        echo "person1对象的性别是:".$person1->sex."<br>";           
        echo "person1对象的年龄是:".$person1->age."<br>";           

        //下面两行访问$person1对象中的方法
        $person1->say();                         
        $person1->run();                         
       
        //下面三行是访问$person2对象中的成员属性
        echo "person2对象的名字是:".$person2->name."<br>";         
        echo "person2对象的性别是:".$person2->sex."<br>";           
        echo "person2对象的年龄是:".$person2->age."<br>";           

        //下面两行访问$person2对象中的方法
        $person2->say();                         
        $person2->run();                         
       
        //下面三行是访问$person3对象中的成员属性
        echo "person3对象的名字是:".$person3->name."<br>";         
        echo "person3对象的性别是:".$person3->sex."<br>";          
        echo "person3对象的年龄是:".$person3->age."<br>";   
       
        //下面两行访问$person3对象中的方法
        $person3->say();                         
        $person3->run();                         
回复

使用道具 举报

 楼主| 发表于 2013-8-5 16:51:33 | 显示全部楼层
特殊的对象引用“$this”

<?php
        /** 声明一个人类Person,其中包含三个成员属性和两个成员方法 */
        class Person {            
                //下面是声明人的成员属性
                var $name;                          //定义人的名字
                var $sex;                            //定义人的性别
                var $age;                           //定义人的年龄

                //下面是声明人的成员方法
                function say(){                    
                        //在类中声明说话的方法,使用$this访问自己对象内部的成员属性
                        echo "我的名字:".$this->name.", 性别:".$this->sex.", 年龄:".$this->age."。<br>";
                }               
               
                //在类中声明另一个方法
                function run(){                     
                        echo $this->name."在走路<br>";    //使用$this访问$name属性
                }               
        }

        //下面三行通过new关键字实例化person类的三个实例对象
        $person1 = new Person();      
        $person2 = new Person();              
        $person3 = new Person();      

        //下面三行是给$person1对象中属性初始化赋值
        $person1->name = "张三";            
        $person1->sex = "男";                
        $person1->age = 20;         

        //下面三行是给$person2对象中属性初始化赋值
        $person2->name = "李四";            
        $person2->sex = "女";         
        $person2->age = 30;                 

        //下面三行是给$person3对象中属性初始化赋值
        $person3->name = "王五";     
        $person3->sex = "男";               
        $person3->age = 40;                 
       
        $person1->say();             //使用$person1访问它中的say()方法,方法say()中的$this就代表这个对象$person1
        $person2->say();             //使用$person2访问它中的say()方法,方法say()中的$this就代表这个对象$person2
        $person3->say();             //使用$person3访问它中的say()方法,方法say()中的$this就代表这个对象$person3
?>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 17:11:39 | 显示全部楼层
构造方法

<?php
        /** 声明一个人类Person,其中声明一个构造方法 */
        class Person {                                
                //下面是声明人的成员属性,都是没有初值的,在创建对象时,使用构造方法赋初值
                var $name;                               //定义人的名字
                var $sex;                                //定义人的性别
                var $age;                                //定义人的年龄

                //声明一个构造方法,将来创建对象时,为对象的成员属性赋予初值,参数中都使用了默认参数
                function __construct($name="", $sex="男", $age=1) {
                        $this->name = $name;          //在创建对象时,使用传入的参数$name为成员属性$this->name赋初值
                        $this->sex = $sex;             //在创建对象时,使用传入的参数$sex为成员属性$this->sex赋初值
                        $this->age = $age;            //在创建对象时,使用传入的参数$age为成员属性$this->age赋初值
                }

                //下面是声明人的成员方法
                function say(){
                        echo "我的名字:".$this->name.",性别:".$this->sex.",年龄:".$this->age."。<br>";
                }               

                function run(){                                       
                        echo $this->name."在走路<br>";       
                }
        }

        //下面三行中实例化person类的三个实例对象,并使用构造方法分别为新创建的对象成员属性赋予初值
        $person1 = new Person("张三", "男", 20); //创建对象$person1时会自动执行构造方法,将全部参数传给它
        $person2 = new Person("李四", "女");     //创建对象$person2时会自动执行构造方法,传入前两个参数
        $person3 = new Person("王五");           //创建对象$person3时会自动执行构造方法,只传入一个参数

        $person1->say();                                            
        $person2->say();                                            
        $person3->say();                                            
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-5 17:17:07 | 显示全部楼层
析构方法

<?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 run() {                   
                        echo $this->name."在走路<br>";   
                }
               
                //声明的析构方法,在对象销毁前自动调用
                function __destruct() {
                        echo "再见".$this->name."<br>";
                }               
        }

        //下面三行通过new关键字实例化person类的三个实例对象
        $person1 = new Person("张三", "男", 20);          //创建对象$person1
        $person1 = null;                                                 //第一个对象将失去引用
        $person2 = new Person("李四", "女", 30);     //创建对象$person2
        $person3 = new Person("王五", "男", 40);     //创建对象$person3

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|技术文档库 ( 闽ICP备15017263号-2 )|网站地图

GMT+8, 2025-5-18 20:44 , Processed in 0.040402 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表