PHP学习5面向对象程序设计

PHP面向对象程序设计

定义和使用类

声明类

用class 关键字
class 类名
{
定义成员变量
定义成员函数
}
在类定义中,使用关键字var 定义一个成员变量,在定义成员变量时可以同时为它赋初值。
类的成员变量分为公有和私有,用public 和private来标识,访问方式与c++相同,公有函数和变量可以在类外访问,私有的不能在类外访问。

常使用$this来引用类中的成员变量。
使用方法 $this->变量名

构造函数

与c++很不同,c++中的构造函数与函数名同名,php中有一个固定的名称。—— ——construct(函数名以两个下划线开头)

class Mystring
{
   public $userName;
   private $pwd;
    function __construct()
    {
        $this->userName="Admin";
        $this->pwd="Admipwd";
    }

    function  output()
    {
        echo ($this->userName);
        
    }
}

在构造函数中,程序对共有变量$userName和私有变量 $pwd设置了初始值。可以在构造函数中使用参数,通常使用参数来设置成员变量特别是私有变量的值。


    function __construct($name,$pwd)
    {
        $this->userName=$name;
        $this->pwd=$pwd;
    }

析构函数

同样有一个固定格式_ _destruct()

function __destruct()
    {
        // TODO: Implement __destruct() method.
        echo "EXIT!";
    }

上面这个析构函数只是简单的打印个字符串。

定义类的对象

$mystr=new Mystring();
在定义对象时使用带参数的构造函数。
$mystr=new Mystring(‘admin’,‘pwd’);
访问公有变量和公共函数的方式。

<?php
class Mystring
{
   public $userName;
   private $pwd;
    function __construct($name,$pwd)
    {
        $this->userName=$name;
        $this->pwd=$pwd;
    }
    function __destruct()
    {
        // TODO: Implement __destruct() method.
        echo "EXIT!";
    }

    function  output()
    {
        echo ($this->userName);

    }
}
//声明对象
$mystr=new Mystring('admin','pwd');
//访问公有变量
echo($mystr->userName);
//访问成员函数
$mystr->output();

静态类成员

静态类成员与具体的对象没有关系,只属于定义它们的类。
例如:private static $count=0;
访问静态变量的方式: $self:: $ count 不能用$this访问了。

因为静态变量不属于任何对象,所以通常使用静态函数来访问静态变量。

<?php
class Users{
    public $username;
    static  private $online_count;

    function __construct($name="")
    {
        $this->username=$name;
        self::$online_count++;
    }
    function __destruct()
    {
        self::$online_count--;
        // TODO: Implement __destruct() method
    }
    static function  getCount()
    {
        Return self::$online_count;
    }

}
$my_use1=new Users('admin');
$my_use2=new Users('lee');
$my_use3=new Users('zhang');
echo (Users::getCount());

instanceof关键字

用于检查给定的对象是否属于(继承于)某个类。如果是返回TRUE,不是返回false

类的继承和多态

class B extends A{ }
从类B中可以访问到类A的成员变量和成员函数。

子类可以访问父类的公有变量和公共成员函数,不能访问父类的私有变量和私有函数。

<?php
class Users{
    public $username;


    function __construct($name="")
    {
        $this->username=$name;
      
    }
    public function dispUserName()
    {
        echo($this->username);
    }
}

class UserLogin extends Users{
    private $lastLoginTime;
    function __construct($name = "")
    {
        $this->username=$name;
        $cur_time=getdate();
        $this->lastLoginTime=$cur_time['year']."-".$cur_time['mon']."-".$cur_time['mday']." ".$cur_time['hours'].":".
            $cur_time['minutes'].":".$cur_time['seconds']."\n";
    }
    function disLoginTime(){
        echo("登录时间为:".$this->lastLoginTime."<br/>");
    }
}
//声明3个对象
$myuser_1=new UserLogin('admin');
$myuser_2=new UserLogin('lee');
$myuser_3=new UserLogin('zhang');
//分别调用父类和子类函数
$myuser_1->dispUserName();
$myuser_1->disLoginTime();
$myuser_2->dispUserName();
$myuser_2->disLoginTime();
$myuser_3->dispUserName();
$myuser_3->disLoginTime();

抽象类和多态

定义一个抽象类
abstract class 抽象类名称{
成员变量
abstract function 抽象函数
}
在继承抽象类的类中必须对抽象函数进行实现。
在不同的子类中,对抽象函数进行不同的实现。

复制对象

新对象名=原有对象名

通过函数参数复制对象

function drawCircle($circle)
{
    if($circle instanceof circle)
        $circle->draw();
}
$mycircle=new circle();
drawCircle($mycircle);

可以在参数列表使用抽象类的对象,它可以接受所有从抽象类派生的子类对象。这样就不需要为每一个子类都定义一个对象的函数了。

继承的多态的例子

<?php
//继承和多态的例子

abstract class Shape{
    public $color;
    abstract function draw();
}
class circle extends Shape{
    public $x,$y,$radius;
    function draw()
    {
        // TODO: Implement draw() method.
        echo("Draw Circle:color $this->color;($this->x,$this->y);Radius $this->radius\n");
    }

}
class line extends Shape{
    public $x1,$y1,$x2,$y2;
    function draw()
    {
        // TODO: Implement draw() method.
        echo("Draw line:color $this->color;($this->x1,$this->y1)=>($this->x2,$this->y2)\n");
    }
}
$mycircle=new circle();
$mycircle->x=100;
$mycircle->y=100;
$mycircle->radius=50;
$mycircle->color='red';
$mycircle->draw();

$myline=new line();
$myline->x1=100;
$myline->y1=100;
$myline->x2=200;
$myline->y2=200;
$myline->color='blue';
$myline->draw();

//通过函数参数复制对象
function drawCircle($circle){
    if($circle instanceof circle){
        $circle->draw();
    }
}
$mycircle=new circle();
$mycircle->x=100;
$mycircle->y=100;
$mycircle->radius=50;
$mycircle->color='red';
drawCircle($mycircle);

使用类Shape的子类对象作为参数,调用drawshape()函数,因为类shape是抽象类,它的draw()函数没有具体的实现代码,如果以circle对象或line对象作为参数, 则可以指向这两个类中的draw函数。

function drawShape($shape){
    if($shape instanceof Shape){
        $shape->draw();
    }
}
$mycircle=new circle();
$mycircle->x=100;
$mycircle->y=100;
$mycircle->radius=50;
$mycircle->color='red';
drawShape($mycircle);

$myline=new line();
$myline->x1=100;
$myline->y1=100;
$myline->x2=200;
$myline->y2=200;
$myline->color='blue';
drawShape($myline);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值