public:权限是最大的,可以内部调用,实例调用等。
protected: 受保护类型,用于本类和继承类调用。
private: 私有类型,只有在本类中使用。

<?php
error_reporting(E_ALL); class test{ public $public;
private $private;
protected $protected;
static $instance; public function __construct(){
$this->public = 'public <br>';
$this->private = 'private <br>';
$this->protected = 'protected <br>';
} static function tank(){
if (!isset(self::$instance[get_class()]))
{
$c = get_class();
self::$instance = new $c;
}
return self::$instance;
} public function pub_function() {
echo "you request public function<br>";
echo $this->public;
echo $this->private; //private,内部可以调用
echo $this->protected; //protected,内部可以调用
$this->pri_function(); //private方法,内部可以调用
$this->pro_function(); //protected方法,内部可以调用
} protected function pro_function(){
echo "you request protected function<br>";
}
private function pri_function(){
echo "your request private function<br>";
}
} $test = test::tank();
echo $test->public;
echo $test->private; //Fatal error: Cannot access private property test::$private
echo $test->protected; //Fatal error: Cannot access protected property test::$protected $test->pub_function();
$test->pro_function(); //Fatal error: Call to protected method test::pro_function() from context
$test->pri_function(); //Fatal error: Call to private method test::pri_function() from context
?>

从上面的例子中,我们可以看出,
public:    可以class内部调用,可以实例化调用。
private:   可以class内部调用,实例化调用报错。
protected:  可以class内部调用,实例化调用报错。


<?php
class test{ public $public;
private $private;
protected $protected;
static $instance; public function __construct(){
$this->public = 'public <br>';
$this->private = 'private <br>';
$this->protected = 'protected <br>';
}
protected function tank(){ //私有方法不能继承,换成public,protected
if (!isset(self::$instance[get_class()]))
{
$c = get_class();
self::$instance = new $c;
}
return self::$instance;
} public function pub_function() {
echo "you request public function<br>";
echo $this->public;
} protected function pro_function(){
echo "you request protected function<br>";
echo $this->protected;
}
private function pri_function(){
echo "you request private function<br>";
echo $this->private;
}
} class test1 extends test{
public function __construct(){
parent::tank();
parent::__construct();
} public function tank(){
echo $this->public;
echo $this->private; //Notice: Undefined property: test1::$private
echo $this->protected;
$this->pub_function();
$this->pro_function();
$this->pri_function(); //Fatal error: Call to private method test::pri_function() from context 'test1'
} public function pro_extends_function(){
echo "you request extends_protected function<br>";
} public function pri_extends_function(){
echo "you request extends_private function<br>";
}
}
error_reporting(E_ALL); $test = new test1();
$test -> tank(); //子类和父类有相同名字的属性和方法,实例化子类时,子类的中的属性和方法会盖掉父类的。
?>

public:    test中的public可以被继承。
private:   test中的private不可以被继承。
protected:test中的protected可以被继承。
static:   test中的static可以被继承。

浅谈PHP的Public、Protected、Private三种方法的区别的更多相关文章

  1. 《Java多线程面试题》系列-创建线程的三种方法及其区别

    1. 创建线程的三种方法及其区别 1.1 继承Thread类 首先,定义Thread类的子类并重写run()方法: package com.zwwhnly.springbootaction.javab ...

  2. jQuery中detach&&remove&&empty三种方法的区别

    jQuery中empty&&remove&&detach三种方法的区别 empty():移除指定元素内部的所有内容,但不包括它本身 remove():移除指定元素内部的 ...

  3. 【转】C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意

    大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是 ...

  4. 在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别

    在 C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三种方法有何区别? int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为 S ...

  5. 【c#文档】在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别

    [c#文档]https://msdn.microsoft.com/zh-cn/library/system.convert.toint32.aspx 转载自:http://www.cnblogs.co ...

  6. 隐藏input的三种方法和区别

    一.<input type="hidden" />二.<input type="text" style="display:none& ...

  7. 浅谈Spring解决循环依赖的三种方式

    引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一种: ...

  8. 【Unity3d游戏开发】浅谈UGUI中的Canvas以及三种画布渲染模式

    一.Canvas简介 Canvas画布是承载所有UI元素的区域.Canvas实际上是一个游戏对象上绑定了Canvas组件.所有的UI元素都必须是Canvas的自对象.如果场景中没有画布,那么我们创建任 ...

  9. Java中创建线程的三种方法以及区别

    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.Java可以用三种方式来创建线程,如下所示: 1)继承Thread类创建线程 2)实现Runnable接口创建线 ...

随机推荐

  1. Oracle11gR2_ADG管理之resinstate实战

    主库上打开闪回 SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES 模拟断电 SQL> ...

  2. Tornado 高并发源码分析之二---Tornado启动和请求处理流程

    Tornado 服务器启动流程 因为Tornado 里使用了很多传类的方式,也就是delegate,之所以要这么做,其实和 iOS 开发那样,也很多的 delegate, 如此来实现高度解耦,但是比较 ...

  3. Java多线程-线程的同步(同步方法)

    线程的同步是保证多线程安全访问竞争资源的一种手段.线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些 ...

  4. PHP自动加载配置ArrayAccess类

    ArrayAccess是PHP的类,可以把对象当成数组来使用访问. Config.php   配置类 <?php namespace IMooc; class Config implements ...

  5. 【poj1679】The Unique MST

    [题目大意] 共T组数据,对于每组数据,给你一个n个点,m条边的图,设图的最小生成树为MST,次小生成树为ans,若MST=ans,输出Not Unique!,否则输出MST [题解] 很明确,先求M ...

  6. 构造方法概念,自定义构造(init)方法的用途, 类工厂方法(就是直接用类名 类调用)

    一. 构造方法 构造方法:在OC中init开头的方法, 我们称之为构造方法 构造方法的用途: 用于初始化一个对象, 让某个对象一创建出来就拥有某些属性和值 // 比如我们定义一个Person的类,然后 ...

  7. 616. Add Bold Tag in String加粗字符串

    [抄题]: Given a string s and a list of strings dict, you need to add a closed pair of bold tag <b&g ...

  8. 17-取石子-hdu1846(巴什博奕)

    http://acm.hdu.edu.cn/showproblem.php?pid=1846 Brave Game Time Limit: 1000/1000 MS (Java/Others)     ...

  9. while循环for循环优缺点和应用

    while循环常用于那种不知道循环次数是多少的情况,比如让用户循环输入一个整数,直到输入某个特殊的字符为止,你根本没法直到这个循环会进行的次数. for循环多用于循环次数比较明确的情况,比如for(n ...

  10. Ajax步骤

    var request = new XMLHttpRequest(); request.open("GET","get.php",ture); request. ...