PHP面向对象学习(二)

本文介绍了构造函数的作用及如何在PHP中使用,同时探讨了类的继承特性,包括属性和方法的访问权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数

构造方法又称为构造函数,是对象被创建时自动调用的方法,用来完成类初始化的工作。构造函数和其它函数一样,可以传递参数,可以设定参数默认值。构造函数可以调用属性,可以调用方法。构造函数可以被其它方法显式调用。在PHP4 中使用与类名同名的方法为构造函数。在PHP5中依然支持了这种方式,但不建议再使用这种方式。在PHP5中规定构造函数使用_ _construct() 函数表示构造函数,注意是两个 _ 。

示例:

class person
{
    
private $name;
    
private $age;
    
public function __construct()
    {
        
$this->name='T.F';
        
$this->age='22';
        
echo '构造函数在类被创建时调用<BR>';
        
echo '初始化名字'.$this->name.'<BR>';
        
echo '初始化年龄'.$this->age;
    }
}
$me=new person;

当实例化一个类的时候得到下面结果:

构造函数在类被创建时调用
初始化名字T.F
初始化年龄22


析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。GC(Garbage Collector)在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁。这是PHP的GC(Garbage Collector)垃圾处理机制,防止内存溢出。当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中的所有对象同样被销毁。__destruct() 析构函数,是在垃圾对象被回收时执行。析构函数也可以被显式调用,但不要这样去做。析构函数是由系统自动调用的,不要在程序中调用一个对象的虚构函数。析构函数不能带有参数。

类的继承:

 继承是面向对象最重要的特点之一,就是可以实现对类的复用。通过“继承”一个现有的类,可以使用已经定义的类中的方法和属性。继承而产生的类叫做子类。 被继承的类,叫做父类,也被成为超类。 PHP是单继承的,一个类只可以继承一个父类,但一个父类却可以被多个子类所继承。从子类的角度看,它“ 继承(inherit , extends)”自父类;而从父类的角度看,它“派生(derive)”子类。它们指的都是同一个动作只是角度不同而已。子类不能继承父类的私有属性和私有方法。在PHP5中类的方法可以被继承,类的构造函数也能被继承。

示例:

class classmate                                          //构造一个类,他有两个私有属性,一个公共方法,和构造函数.
{
    
private $className;
    
private $schoolName;
    
function __construct()
    {
        
$this->className='02310302';
        
$this->schoolName='BIT';
        
echo '班级为'.$this->className;
        
echo '学校为'.$this->schoolName.'<BR>';
    }
    
function home($address)
    {
        
$this->address=$address;
        
return $this->address;
    }
}
class boy extends classmate {               //子类boy继承自classmate
    }
    
$me=new boy();                          //实例化继承自clasasmate类的boy类,构造函数也被继承。
    echo '地址为'.$me->home('重庆');         //子类同样继承了父类的公共方法 

输出为:

班级为02310302学校为BIT
地址为重庆


访问权限

private 不能直接被外部调用,只能由当前对象调用。外界无法调用。示例:

class people                       //构造一个类,他有一个私有属性money,一个公共方法
{
    
private $money=1000;          
    
public function lend($num)
    {
        
if($this->money>$num)
        {
            
$this->money=$this->money-$num;
            
echo '没事,借给你吧!不过我也不多了<BR>';
        }
        
else {
            
echo '对不起,我没有这么多啊<BR>';
        }
                
    }
    
}
$you = new people();     //实例化对象
$you->lend(500);         //借点钱试试
$you->lend(800);         //再借
echo $you->money;        //直接查看你有多少钱行不?没门!这里会出现错误,因为money是私有属性,外部不能访问.

输出:

没事,借给你吧!不过我也不多了
对不起,我没有这么多啊

Fatal error: Cannot access private property people::$money in F:/service/apache/study/class2.php on line 57

Private只能被子类调用。示例:

class people2                       //构造一个类,他有一个受限制的属性money,一个公共方法
{
    
protected  $money=1000;          //修改属性为受限制。即只能由子类访问
    public function lend($num)
    {
        
if($this->money>$num)
        {
            
$this->money=$this->money-$num;
            
echo '没事,借给你吧!不过我也不多了<BR>';
        }
        
else {
            
echo '对不起,我没有这么多啊<BR>';
        }
                
    }    
}
class girlfrinds extends people2 {        //girlfrinds类继承自people类
    function viewmoney()                  
    {
        
return $this->money;              //子类中的方法访问受限制属性。返回其值
    }
}
$she = new girlfrinds();     //实例化对象
$she->lend(500);         //借点钱试试
$she->lend(800);         //再借
echo $she->viewmoney();        //不让别人看!那女朋友呢?不给我说我不给你做饭。

输出:

没事,借给你吧!不过我也不多了
对不起,我没有这么多啊
500

Public 修饰的属性和方法,可以被无限制的调用。示例:运行结果:

class people3                       //构造一个类,他有一个公共属性money,一个公共方法
{
    
public  $money=1000;          //money属性为公共的
    public function lend($num)
    {
        
if($this->money>$num)
        {
            
$this->money=$this->money-$num;
            
echo '没事,借给你吧!不过我也不多了<BR>';
        }
        
else {
            
echo '对不起,我没有这么多啊<BR>';
        }
                
    }
    
}
$he = new people3();
$he->money=$he->money-2000;       //任何地方都可对public修饰的属性和方法进行访问。不用借,直接抢吧
echo '我的钱还有'.$he->money;      //结果是灾难的...

 

我的钱还有-1000

未完待续...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值