PHP 面向对象基础

Original 2018-11-13 18:00:01 216
abstract:/基类 class Person {     /**      * public protected private 为不同的访问限制      * public 本类 ,子类&
/基类
class Person
{

    /**
     * public protected private 为不同的访问限制
     * public 本类 ,子类 ,外部都可以访问
     * protected 本类 子类 可以访问,外部不能访问
     * private 私有  ,只有自己可以访问
     *
     *  访问范围和java 一样
     *
     */
    public $name;
    protected $age;
    private $money;

    static $work = ' php 程序员';  //static 修饰的 属性和方法为 静态属性或者方法 ,属于类,不属于任何实例

    /**
     * Person constructor.
     * @param $name
     * @param $age
     * @param $money
     * 类的构造方法
     */
    public function __construct($name, $age, $money)
    {
        $this->name = $name;
        $this->age = $age;
        $this->money = $money;
    }


    public function showMe()
    {

        echo '我叫 :' . $this->name . ' 我今年 ' . $this->age . '  我资产 ' . $this->money;

    }


    //静态方法的定义
    public static function work()
    {

        //访问类中静态属性的方法  self:: ,类名::  ,static ::
        //self和 类名在有继承关系 的类中 ,不能动态 根据实例的类动态分配 同名的属性值,
        //子类和父类有同名的属性 访问必须用static 来限定,(后期静态绑定,由调用者决定 输出)

//      echo '我的工作是 '.self::$work;
//      echo '我的工作  '.Person::$work;

        echo '我的工作是 ' . static::$work;    //后期静态绑定


    }




    //重载   当调用类中不存在的方法,会自动调用__call()方法
    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.处理重载逻辑
        //   1.判断参数个数
        $num = count($arguments);
       //2.判断方法存在
        if($name == 'study'){

            if(method_exists($this,$f='study'.$num)){  //对应参数存在就调用

                call_user_func_array([$this,$f],$arguments);
            }


        }


    }


    public function study1($name)
    {
        echo '调用了1个参数的study 方法';
    }

    public function study2($name, $name2)
    {
        echo '调用了2个参数的study 方法';
    }

    public function study3($name, $name1, $name2)
    {
        echo '调用了3个参数的study 方法';
    }


}



//trait 类
trait Dog{
    public function show(){

        echo '我是个小狗';
    }

    public function work(){
        echo '我的工作是看家';
    }

}

//trait 类
trait Cat{
    public function show(){

        echo '我是个小猫';
    }

    public function work(){
        echo '我的工作是卖萌。。。';
    }

}



// 基类 子类 trait 三个有同名方法时 , 子类调用同名方法     访问的 优先级 子类>trait>父类


//继承 类
class  XiaoMing extends Person{

    //多个 trait 类 以及 有方法重名 处理
   use Dog,Cat{
       Dog::work insteadof Cat;  //Dog ->work 方法替代 cat->work
       Cat::work as workC;  //Cat ->wor 取别名 workC  调用=>  (new Cat())->workC();
       
       
       
       
   }
    public function work(){
        echo '我是小明,我的工作 是学习';
    }


    

}









//实例化类
$p = new Person('狗蛋', 20, '100w');
//调用类的方法
$p->showMe();

echo '<br>';
//访问 静态方法
Person::work();
echo '<br>';
//访问属性
Person::$work;


//重载调用

$p->study('张三');
echo '<br>';
$p->study('张三','李四');


Correcting teacher:韦小宝Correction time:2018-11-14 09:19:30
Teacher's summary:嗯!写的很不错!不过课后还得记得多多练习啊!!加油吧!!

Release Notes

Popular Entries