资讯专栏INFORMATION COLUMN

php 修饰符和魔术方法 (基础)

luodongseu / 1545人阅读

摘要:中有三种访问修饰符,它们可以分别用在类的属性和方法上类的属性和方法统称为类的成员,用来修饰类成员的访问权限公共的默认受保护的私有的常用魔术方法,,,,,,,,,在下面的例子中展示一下用法调用方法调用方法可以将所有变量都能

PHP中有三种访问修饰符,它们可以分别用在类的属性和方法上(类的属性和方法统称为类的成员),用来修饰类成员的访问权限

public(公共的、默认)

protected(受保护的)

private(私有的)

php 常用魔术方法:

__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __invoke(), __clone() 

在下面的例子中展示一下用法

class Test
{
    private $a = "a";
    protected $b = "b";
    public $c = "c";

    public function __set($name, $value)
    {
        // TODO: Implement __set() method.
    }

    public function __get($name)
    {
        // TODO: Implement __get() method.
    }

    public function __construct()
    {
        echo "begin construct!";
    }

    public function __destruct()
    {
        echo "begin destruct!";
    }

    public function __invoke()
    {
        echo "try to invoke!";
        // TODO: Implement __invoke() method.
    }

    public function __isset($name)
    {
        // TODO: Implement __isset() method.
    }

    private function get1()
    {
        var_dump("private get a :" . $this->a . "
");
        var_dump("private get b :" . $this->b . "
");
        var_dump("private get c :" . $this->c . "
");
    }

    protected function get2()
    {
        var_dump("protected get a :" . $this->a . "
");
        var_dump("protected get b :" . $this->b . "
");
        var_dump("protected get c :" . $this->c . "
");
    }

    public function get3()
    {
        var_dump("public get a :" . $this->a . "
");
        var_dump("public get b :" . $this->b . "
");
        var_dump("public get c :" . $this->c . "
");
    }

}

调用Test方法
$t = new Test();
$t(123); // 调用invoke

$t->get3();
// public 方法可以将所有变量都能被调用到
// public get a :a
// public get b :b
// public get c :c

// __set 和 __get 魔术方法使用,如果不定义,那么对于 private 属性 $a 将无法被操作
//$t->a = "123";
//echo $t->a;

//$t->get1(); // private 方法外部不可被调用
//$t->get2(); // protected 方法外部不可被调用


class Test2 extends Test
{
//    private $b = ""; // 报错,子类继承修饰符等级不能低于父类
    protected $b;// ok 或  public $b
    private function get1()
    {
        var_dump("Test2 private get a :" . $this->a . "
"); // 报错,私有变量不能被继承
        var_dump("Test2 private get b :" . $this->b . "
");
        var_dump("Test2 private get c :" . $this->c . "
");
    }

    public function get2() // 继承时修改了 访问权限
    {
//        var_dump("get a :" . $this->a . "
");// 报错,私有变量不能被继承
        var_dump("Test2 public get b :" . $this->b . "
");
        var_dump("Test2 public get c :" . $this->c . "
");
    }

    public function get3()
    {
//        var_dump("get a :" . $this->a . "
");// 报错,私有变量不能被继承
        var_dump("Test2 public get b :" . $this->b . "
");
        var_dump("Test2 public get c :" . $this->c . "
");
    }
}

$t2 = new Test2();
$t2->get3();
$t2->get2(); // protected方法外部无法被调用,但修改为public后可以被使用
//$t2->get1(); // private方法外部无法被调用

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28467.html

相关文章

  • PHP面向对象

    摘要:面向对象面向对象基础面向对象什么是类具有相同属性特征和方法行为的一系列个体的集合,类是一个抽象的概念。析构函数,当一个对象被销毁前,自动调用。作用是为新克隆的对象进行初始化赋值对象序列化时,自动调用。使用抽象类的作用限制实例化。 面向对象 面向对象基础 面向对象 什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念。 什么是对象? 从类中,拿到的具有具体...

    seanlook 评论0 收藏0
  • PHP_OOP

    摘要:特殊在,方法被对象调用执行时,会自动确定是那个对象调用的该方法,会使用该对象为方法内的赋值构造析构类,没有作用域,作用域,只是讲,函数内和函数外。析构在对象消失对象被销毁时,也会自动执行一个方法,称之为析构方法。 相关定义 对象(object):现实生活中的实体,在编程语言中的体现。实体都有属性和功能。一组数据,和操作管理这些数据的操作,定义在一起就形成了一个实体,称之为对象。(属性和...

    RiverLi 评论0 收藏0
  • PHP面试常考内容之面向对象(3)

    摘要:面试专栏正式起更,每周一三五更新,提供最好最优质的面试内容。继上一篇面试常考内容之面向对象发表后,今天更新面向对象的最后一篇。面向对象的主要特征为封装继承多态。为了提高内聚性减少引起变化,单一原则是低耦合高内聚的面向原则上的引申。 PHP面试专栏正式起更,每周一、三、五更新,提供最好最优质的PHP面试内容。继上一篇PHP面试常考内容之面向对象(2)发表后,今天更新面向对象的最后一篇(3...

    xfee 评论0 收藏0
  • 类的关键字、魔术方法与单态设计模式

    摘要:方法如无的调用,则默认为为静态方法。声明静态方法会有错误提示,但很方便,能用尽量用效率高。 一、面向对象的关键字 1.instanceof操作符: 对象是否属于类(检测继承性),如下: class Person {}; class Student extends Person {}; $p=new Person; $s=new Student; ...

    bovenson 评论0 收藏0
  • 面向对象的特性:封装性

    摘要:一封装的特性对象的属性或方法加上修饰符尽可能隐藏内部细节访问控制特性修饰符种类二修饰符私有性封装,外部不能调用,内部其他成员可以,用于为其他方法铺路的方法,不露出接口。 一、封装的特性 1.对象的属性或方法加上修饰符 2.尽可能隐藏内部细节 3.访问控制 4.PHP5特性 5.修饰符种类:public/private/protected/var 二、修饰符 1.private: ...

    freecode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<