`
hudeyong926
  • 浏览: 2032819 次
  • 来自: 武汉
社区版块
存档分类
最新评论

php class中public,private,protected的区别,以及实例

 
阅读更多

一,public,private,protected的区别

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 "you 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可以被继承。

唉,对于这些东西,老是不喜欢记着,用的时候,总感觉不对,又要去查,所以写个例子,方便自己查看。

分享到:
评论

相关推荐

    java中public、protected、默认、private关键字

    Java 中有四种访问修饰符:public、protected、默认(default)和 private。这四种修饰符的作用域从大到小依次降低。 1. public 修饰符 public 修饰符是最宽松的访问修饰符,它允许从任何地方访问修饰的成员,...

    php class中public,private,protected的区别以及实例分析

    PHP中的类成员访问控制关键字public、private和protected定义了类属性和方法的可见性。它们决定了一个类成员能否被类外的代码访问或调用。理解这三者的区别,对于编写面向对象的PHP代码至关重要。 首先,public成员...

    JS中的public和private对象,即static修饰符

    下面我们将基于提供的示例代码来探索JavaScript中如何实现public、private属性和方法,以及模拟static效果。 1. public属性和方法: 在JavaScript对象字面量中定义的属性和方法默认都是public(公开的),可以在...

    Ruby中的public、private、protected区别小结

    Ruby中,却不行:你只能在你本对象的实例中访问本对象的private方法。 因为Ruby的原则是“private意为你不能指定方法接收者”,接收者只能是self,且self必须省略! 所以Ruby中子类可以访问父类的privat

    面向对象修饰符public private protest super final abstract理解

    这些修饰符包括`public`、`private`、`protected`以及`final`和`abstract`等。下面将详细解释这些关键字的意义及其在面向对象设计中的作用。 ### 1. `public` `public`是最开放的访问修饰符,意味着无论在哪一个类...

    详谈PHP中public,private,protected,abstract等关键字的用法

    总结起来,`public`、`private`、`protected` 和 `abstract` 关键字是PHP中控制类的封装和继承的重要工具,它们帮助开发者构建更加安全、灵活的代码结构。通过合理地使用这些关键字,可以确保代码的可维护性和可扩展...

    Ruby 之 class 中的 private、 protected、public

    代码如下: class AccessTest def test return “test private” end def test_other(other) “other object ”+ other.test end end t1 = AccessTest.new t2 = AccessTest.new p t1.test # =&gt; test private p t1....

    简单谈谈Ruby的private和protected

    ### Ruby中的访问控制:Private与Protected详解 在面向对象编程中,访问控制是确保类的封装性和安全性的重要机制之一。Ruby作为一种动态类型的面向对象语言,提供了`public`、`protected`和`private`三种访问控制...

    如何直接访问php实例对象中的private属性详解

    本文将深入探讨如何直接访问PHP实例对象中的`private`属性,同时回顾面向对象的访问控制规则。 首先,PHP提供了三种访问修饰符:`public`、`protected`和`private`。`public`属性或方法可以在任何地方被访问,不受...

    PHP类实例教程.docx

    public属性和方法可以在任何地方访问,protected仅在类及其子类中可用,而private只能在定义它的类内部访问。 9. 类的重写(override) 子类可以覆盖父类的方法,这称为方法重写。重写需要在子类中使用与父类相同...

    PHP抽象类与接口的区别实例详解

    此外,抽象类中的抽象方法可以有访问控制修饰符(public、protected和private),表示方法的访问权限。类的继承是使用关键字extends来实现的。值得注意的是,一个类不能同时继承多个抽象类,但可以继承一个抽象类,...

    PHP中的类详细介绍PHP中的类

    在PHP中,属性可以声明为公有(public)、私有(private)或保护(protected),以控制其访问权限。 ```php class MyClass { public $publicVar; private $privateVar; protected $protectedVar; } ``` 3. ...

    php5 类与对象

    PHP 访问控制与封装 `public`, `protected`, `private` 修饰符 这些修饰符控制了类中成员的可访问性。`public` 成员可以在任何地方访问;`protected` 成员只能在类本身及其子类中访问;`private` 成员只能在类本身...

    PHP实现在对象之外访问其私有属性private及保护属性protected的方法

    本文实例讲述了PHP实现在对象之外访问其私有属性private及保护属性protected的方法。分享给大家供大家参考,具体如下: public 表示全局的访问权限,类内部外部子类都可以访问; private表示私有的访问权限,只有本...

    php导出CSV抽象类实例

    在PHP中,导出数据到CSV格式是常见的需求,尤其是在需要将数据集以电子表格形式供用户下载时。当数据量较大时,一次性将所有数据加载到内存中导出可能会导致内存溢出(内存不足问题)。因此,创建一个能够分批次导出...

Global site tag (gtag.js) - Google Analytics