php_public/private/protected 类属性_区别

概况:

  • public 表示全局,类内部外部子类都可以访问;
  • private表示私有的,只有本类内部可以使用;
  • protected表示受保护的,只有本类或子类或父类中可以访问;

具体区别:

  • public: 公有属性或方法

在子类中可以通过self::var 或self::method 来调用 ,可以通过parent::method来调用父类中的方法,但不能调用公有属性.
在实例中可以通过$obj->var或self::method 来调用

  • protected: 受保护类型

在子类中可以通过self::var 或self::method调用, 可以通过parent::method来调用父类中的方法在实例中不能通过$obj->var 来调用 protected类型的方法或属性

  • private: 私有类型

该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法

  • self 和parent 的区别

a).在子类中常用到这两个对象。他们的主要区别在于self可以调用父类中的公有或受保护的属性,但parent不可以调用
b).self:: 它表示当前类的静态成员(方法和属性) 与 $this不同,$this是指当前对象

<?php
class BaseClass {
  public $public = 'public';
  private $private = 'private';
  protected $protected = 'protected';
  function __construct(){
  }
  function print_var(){
    print $this->public;echo '<br />';
    print $this->private; echo '<br />';
    print $this->protected; echo '<br />';
  }
}

class Subclass extends BaseClass {
  // public $public = 'public2';
  protected $protected ='protected2';
  function __construct(){
    echo $this->protected;//可以访问,因为类中定义为受保护的,所以在本类或子类中可以,子类中还可以重复付值
    echo '<br />';
    echo $this->private;//error 因为是私有的只有在定义她的类baseclass中可以用
  }
}
  $obj1 = new BaseClass();
  $obj1->print_var();
  //echo $obj1->protected;//error 因为是受保护的,只有在本类内部或子类父类中可以调用
  //echo $obj1->private;//error 同上私有的,只有在本类内调用
  echo $obj1->public;
  echo "<hr />";
  $obj2 = new Subclass();
  echo '<br />';
  echo $obj2->public;echo '<br />';
  echo $obj2->protected;
  //echo $obj2->private;//error
  //echo $obj2->protected;//error
?>

@ 阴-2016-11-29 20:56:40

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,100评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,144评论 18 399
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,165评论 0 9
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 4,161评论 0 6
  • “可恶!”一名身着暗红色战甲的人躲闪过一道雷电后怒骂道,背后的血红蝠翼血光骤增,速度顿时提升到极致,化成一...
    浪里小银龙阅读 697评论 5 5

友情链接更多精彩内容