PHP面向对象基本说明

定义类,属性与方法

<?php

class Xun
{
    //定义属性
    protected $name;

    //定义方法
    public function index()
    {
        $this->name = '我永远喜欢菠萝赛东';
    }

    public function make()
    {
        echo '第二次' . $this->name;
    }
}

//实例化对象
$obj = new Xun;
$obj->index();
$obj->make();
echo $obj->name;
(new Xun)->make();

三个修饰词

<?php
//类里面有方法与属性,方法与属性有如下修饰词:public,private,protected;

//private私有的属性所修饰的方法或属性只能被该类使用,不能被实例化的对象所调用;在继承中不能被继承的子类所调用

//protected受保护的属性所修饰的方法或属性只能被该类使用,不能被实例化的对象所调用,但在继承中与private私有的修饰不通,该受保护的属性可以被继承的子类所屌用


class Xun
{
    public $npc;

    private $blsd;

    protected $ww;

    public function index()
    {
        $this->npc = '我就是npc';

        $this->blsd = '我就是blsd';

        $this->ww = '我就是ww';
    }
}

class Yang extends Xun
{
    public function test()
    {
        $this->index();

        echo $this->npc;
        echo $this->blsd;
        echo $this->ww;
    }
}

// //实例化xun
// $obj = new Xun;

// $obj->index();

// echo '<pre/>';

// var_dump($obj->npc);
// var_dump($obj->blsd);
// var_dump($obj->ww);

//实例化Yang
$yang = new Yang;

$yang->test();

类的继承

<?php
//php的类的继承是单继承,不能进行多继承;可以通过trait的特殊类实现多继承
class Xun
{
    public function index()
    {
        echo '我是Xun';
    }

    public function make()
    {
        echo '我是xun的make';
    }
}

class Yang extends Xun
{
    //子类重写父类方法
    public function make()
    {
        echo '我是yang的make';
    }
}

//实例化
$obj = new Yang;

$obj->index();
$obj->make();

类的多继承

<?php
//trait定义的特殊类可以实现多继承;但trait不是类,不能被实例化,只能做父类被继承
// 多继承的优先级为子类方法的重写最优先,
//继承trait的类比extends继承的类优先
// 父类同名可以取别名

trait Bo
{
    public function index()
    {
        echo '菠萝赛东!';
    }
}

trait Npc
{
    public function index()
    {
        echo 'Npcccccccc!';
    }

    public function make()
    {
        echo __METHOD__;
    }
}

class Ww
{
    public function index()
    {
        echo '弯弯弯弯弯!';
    }
}

//子类继承父类

class Nb extends Ww
{
    //继承使用use;如果存在冲突可以使用取别名或者是指定使用哪一个方法, insteadof
    use Bo, Npc {
        //指定使用那个类的方法,这是是使用Npc类的index方法代替Bo类
        Npc::index insteadof Bo;

        //给Bo类的index方法加别名
        Bo::index as index2;
    }




    // public function index()
    // {
    //     echo 'Nbbbbbb!';
    // }
}

//实例化子类
$obj = new Nb;

$obj->index();

$obj->make();

$obj->index2();

防止父类方法被重写

<?php
//在继承中防止父类方法被子类重写可以使用final

class Xun
{
    public final function index()
    {
        echo '我永远喜欢菠萝赛东';
    }
}

class Yang extends Xun
{
    // public function index()
    // {
    //     echo '我用喜欢npc';
    // }
}

$obj = new Yang;

$obj->index();

类与接口

<?php
//定义接口,该接口与抽象类一样,只是定义方法名称,不做方法实现,接口可以被多继承,但抽象类或者是类在php中只能链式继承或者说是单继承
interface Xun
{
    function index();
    function make();
}

interface Test
{
    function index();
}

class Yang implements Xun, Test
{
    private
    public function wen()
    {
        //echo 'woyongyuanxihuangboluosaidong';
        echo '555';
    }
    public function index()
    {
    }
    public function make()
    {
    }
}

$obj = new Yang;
// $obj->yang();

抽象类

<?php

//定义抽象类,有抽象方法的类一定是抽象类,抽象类只定义不实现;当继承该类时需要实例化该方法;在php中类的继承是单继承的不能实现多继承,接口可以实现多继承或者说是多实现
abstract class Xun
{
    abstract function index();

}

// $obj = new Xun;
// $obj->index();
class Yang extends Xun
{
    public function index()
    {
    }
    public function make()
    {
        echo '我永远喜欢菠萝赛东';
    }
}

$obj = new Yang;

$obj->make();

类的静态属性与方法

<?php
//类里面存在属性与方法

//定义静态方法与静态属性
class Xun
{

    public static $name;

    public static function index()
    {
        self::$name = '我永远喜欢npc';
        echo self::$name;
        // echo '我永远喜欢菠萝赛东';
    }
}

//静态属性是属于类的,不能被实例化的对象调用;静态方法里面不能用this指针,因为静态方法是类的,调用属性可以使用self
$obj = new Xun;
$obj->index();

类的构造方法

<?php
//构造函数,当类被实例化的时候自动执行构造函数
class Xun
{

    public function __construct()
    {
        echo '我永远喜欢菠萝赛东';
    }

    public function __destruct()
    {
        echo '我永远喜欢菠萝赛东two';
    }

    public function index()
    {
        echo '谁是谁?';
    }
}

$obj = new Xun;
$obj->index();



类的析构方法

<?php
//析构函数,在实例化的对象销毁时自动调用
class Xun
{
    public function index()
    {
        echo '我会被先执行';
    }
    public function __destruct()
    {
        echo '如果说,你是海上的烟火';
    }
}

$obj = new Xun;

$obj->index();
 

类的魔术方法

<?php

//魔术方法__get;当获取不存在,私有或者受保护的属性时自动调用

class Xun
{

    public function __get($name)
    {
        print_r($name);
    }
}

$obj = new Xun;

$obj->xun;

<?php
//魔术方法__set;当设置不存在,私有或者受保护的属性时自动调用

class Xun
{
    protected $xun;

    public function __set($name, $value)
    {
        echo '我永远喜欢52004';
        var_dump($name);
        var_dump($value);
    }
}

$obj = new Xun;

$obj->xun = '你好吗';

<?php
//魔术方法__call;当调用类里面不存在的方法或不可访问方法时自动调用;有两个参数,第一个为调用的方法名,第二个为该方法的实参,以数组方式呈现

class Xun
{
    private function index($name)
    {
        echo $name;
    }
    public function __call($name, $value)
    {
        echo 'xungephp';
        print_r($name);
        print_r($value);
    }
}

$obj = new Xun;

$obj->index('菠萝赛东');

<?php

//__callStatic ,当对象对用该类不可方法的静态方法是被调用
class Xun
{
    public static function index($name)
    {
        echo 'Npccccccc';
    }

    public function __callStatic($name, $arguments)
    {
        print_r($name);
        print_r($arguments);
    }
}

$obj = new Xun;

$obj->index('啦啦啦啦');

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值