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




public 表示全局,类内部外部子类都可以访问;

private表示私有的,只有本类内部可以使用;

protected表示受保护的,只有本类或子类或父类中可以访问;

<?
//父类
class father{
 public function a(){
  echo "function a"; 
 }
 private function b(){
  echo "function b"; 
 }
 protected function c(){
  echo "function c"; 
 }
}
//子类
class child extends father{
  function d(){ 
    parent::a();//调用父类的a方法
  }
  function e(){ 
    parent::c(); //调用父类的c方法
  } 
 function f(){ 
    parent::b(); //调用父类的b方法
  } 

}
$father=new father();
$father->a();
$father->b(); //显示错误 外部无法调用私有的方法 Call to protected method father::b() 
$father->c(); //显示错误 外部无法调用受保护的方法Call to private method father::c() 

$chlid=new child();
$chlid->d();
$chlid->e();
$chlid->f();//显示错误 无法调用父类private的方法 Call to private method father::b() 
?>



Static关键字

声明类成员或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)。

由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。

静态属性不可以由对象通过->操作符来访问。

class Foo
{
    public static $my_static = 'foo';


    public function staticValue() {
return $my_static;
        //return self::$my_static;
    }
}


class Bar extends Foo
{
    public function fooStatic() {
        return parent::$my_static;
    }
}




print Bar::$my_static . "\n";
$Foo = new Foo();
var_dump($Foo->staticValue());


interface  团队的运行领袖(CEO),他只提供方向和标准,你是他的部下,就必须按它的标准来。
abstract   团队的运行的技术总监,他知道你不知道,你缺什么你就要什么,但他不会给你干及基础活。
final        团队的PHP程序员,但是比你专业,你就眼巴巴的望着吧,你摸不懂人家也别想篡改人家的东西。
static       团队的公积金,你只能把你的工资往里面装,别想拿出来,就算团队解散你也一分都拿不回来。
const       你的工资,说了你今年只有10K,多一分也没有,当然也一分不会少你的。
public      你的资料,谁想看都可以,不管是领导还是其他团队。
protected 你收藏的苍老师经典,私下传阅可以,但千万不能让领导看到。
private     你自己的水杯,这种东西自然是自己才能碰。。。谁碰你都要生气。。
implements 笔记,这上面记录着领导下发的标准。
extents    香烟,用他你可以和同事处得很好,你们彼此用烟交流,找他就发一只,他没有了就跟你要一只。


1、php 常量
define("a",11);
2、php 类常量
    class test{
        const a=111;
    }
    var_dump(test::a);
    $b = new test();
    var_dump($b::a);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值