php面向对象理解(一)

常用的继承过程,以及对public、private、protected修饰符的理解:

/*****************************父类********************************/
/**
* person父类
*/
class person 
{   

    public $name;       //共有属性在类的里面和外面都可以被访问,可以被子类继承
    public $age;
    public $sex;
    protected $myprotect;   //受保护属性,不能被外部访问,只能在类里面被访问,以及继承了本类的子类可以访问
    private $myprivate;     //私有属性,只能被本类的内部访问,不能被外部访问,也不能被子类继承访问

    public static $mystaticObj;  //全局静态变量,直接通过类方法访问
    /**
    * 构造方法
    */
    function __construct($name,$age,$sex)
    {
        $this->name = $name;
        $this->age = $age;
        $this->sex = $sex;

        $this->myprotect = "myprotect";
        $this->myprivate = "myprivate";
    }

    /**
    * 共有实例方法,可以被类的里面和外面访问,并且可以子类继承重写
    */
    public function personInfo() {  
        echo "姓名:".$this->name."\n"."年龄:".$this->age."\n"."性别:".$this->sex."\n"."myprotect:".$this->myprotect."\n"."myprivate:".$this->myprivate;
    }

    /**
    * 私有实例方法,可以被类的里面访问,但不能被类的外面访问,也不能被子类继承访问
    */
    private function mysecret() {
        echo "这是我的秘密,不能告诉你";
    }

    /**
    * 受保护实例方法,可以被类的里面访问,也可以被子类访问,但不能被类的外面访问
    */
    protected function myprotectfun() {
        echo "这是我的myprotectfun方法";
    }

    public static function share() {
        echo "静态方法,直接通过类名调用";
    }

    function __destruct() {
        echo "god damn,I die";
    }

}

/*****************************子类********************************/

/**
* 继承自person的子类
*/
class student extends person
{
    public $grade;

    function __construct($name,$age,$sex,$grade)
    {
        parent::__construct($name,$age,$sex);
        $this->grade = $grade;
    }

    public function personInfo() {
        parent::personInfo();
        echo "\n"."grade:".$this->grade."\n";

        /*  结果:

            姓名:klp
            年龄:24
            性别:male
            myprotect:myprotect
            myprivate:myprivate
            grade:six
            这是我的子类myprotectfun方法
        */

        $this->myprotectfun();
    }

    protected function myprotectfun() {
        echo "这是我的子类myprotectfun方法";
    }

    public static function share() {
        echo "子类静态方法,直接通过类名调用";
    }
}


// $obj = new person("klp","26","male");
// $obj->personInfo();
// $obj->myprotect;   报错:Fatal error: Cannot access protected property person::$myprotect
// $obj->mysecret();  /*报错:Fatal error: Call to private method person::mysecret() from context*/
// person::share();  /*静态方法,直接通过类名调用*/

$stu = new student("klp","24","male","six");
$stu->personInfo();
$stu->myprivate;   /*返回为空,但是不会报错*/
student::share();  /*子类静态方法,直接通过类名调用*/

 

posted @ 2017-08-22 08:58  Caersi  阅读(169)  评论(0编辑  收藏  举报