轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
猜你喜欢
查看: 4985|回复: 1
打印 上一主题 下一主题

php5中oop6的可见性控制的示例代码分享

[复制链接]

0

主题

0

帖子

1万

积分

钻石会员

Rank: 8Rank: 8

积分
17424
QQ
跳转到指定楼层
楼主
发表于 2020-3-18 05:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
和其他语言一样,也是通过关键字public,protected,private的限制:

<?php 
/** 
 * 定义MyClass 
 */ 
class MyClass 
{ 
        public $public = 'Public';//公有 
        protected $protected = 'Protected';//保护 
        private $private = 'Private';//私有 
 
        function printHello() 
        { 
                echo $this->public;echo "<br/>"; 
                echo $this->protected;echo "<br/>"; 
                echo $this->private;echo "<br/>"; 
        } 
} 
 
$obj = new MyClass(); 
echo $obj->public; // 可以 
//echo $obj->protected; // 致命错误 
//echo $obj->private; // 致命错误 
$obj->printHello(); // 输出 Public, Protected and Private 
 
 
/** 
 * 定义 MyClass2 
 */ 
class MyClass2 extends MyClass 
{ 
        // 对于公有和保护方法或成员,我们可以重新声明,但私有的不可以 
        protected $protected = 'Protected2'; 
 
        //重写    
        function printHello() 
        { 
            echo "这个是MyClass2的:";echo "<br/>"; 
                echo $this->public;echo "<br/>"; 
                echo $this->protected;echo "<br/>"; 
                //echo $this->private;echo "<br/>";不能访问到父类的私有属性 
        } 
} 
 
$obj2 = new MyClass2(); 
echo $obj2->public; // 可以 
//echo $obj2->private; // 未定义 
//echo $obj2->protected; // 致命错误 
$obj2->printHello(); // 输出 Public, Protected2, Undefined 
 
?>

当然通过这些符,我们也可以对实现同样的可访问控制:

<?php 
/** 
 * 定义 MyClass 
 */ 
class MyClass 
{ 
        // 构造函数必须是public 
        public function construct() { } 
 
        // 声明一个public 的方法 
        public function MyPublic() { } 
 
        // 声明 protected 方法 
        protected function MyProtected() { } 
 
        // 声明private 方法 
        private function MyPrivate() { } 
 
        // 默认是public的 
        function Foo() 
        { 
          //类里面可以直接访问 
                $this->MyPublic(); 
                $this->MyProtected(); 
                $this->MyPrivate(); 
        } 
} 
 
$myclass = new MyClass; 
$myclass->MyPublic(); // 可以 
$myclass->MyProtected(); // 致命错误 
$myclass->MyPrivate(); //致命错误 
$myclass->Foo();    
 
 
/** 
 * 定义 MyClass2 
 */ 
class MyClass2 extends MyClass 
{ 
        //public 
        function Foo2() 
        { 
                $this->MyPublic(); 
                $this->MyProtected(); 
                $this->MyPrivate(); // 致命错误 
        } 
} 
 
$myclass2 = new MyClass2; 
$myclass2->MyPublic(); // 可以 
$myclass2->Foo2();    
 
/** 
 * 定义Bar 
 */ 
    
class Bar    
{ 
        public function test() { 
                $this->testPrivate(); 
                $this->testPublic(); 
        } 
 
        public function testPublic() { 
                echo "Bar::testPublic
"; 
        } 
         
        private function testPrivate() { 
                echo "Bar::testPrivate
"; 
        } 
} 
 
class Foo extends Bar    
{ 
        public function testPublic() { 
                echo "Foo::testPublic
"; 
        } 
         
        private function testPrivate() { 
                echo "Foo::testPrivate
"; 
        } 
} 
 
$myFoo = new Foo(); 
 
//通过继承来的公有方法Bar::test() 
$myFoo->test(); // Bar::testPrivate    
                                      // Foo::testPublic 
?>

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

0

主题

16

帖子

62

积分

注册会员

Rank: 2

积分
62
沙发
发表于 2022-5-20 11:26 来自手机 | 只看该作者
安卓程序源代码下载
回复

使用道具 举报

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表