`

PHP: 访问控制(可见性)

 
阅读更多

https://secure.php.net/manual/zh/language.oop5.visibility.php

 

<?php
/**
 * Define MyClass
 */
class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义,但 private 而不能
    protected $protected = 'Protected2';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj2 = new MyClass2();
echo $obj2->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2 和 Undefined

?>

 

 

<?php
/**
 * Define MyClass
 */
class MyClass
{
    // 声明一个公有的构造函数
    public function __construct() { }

    // 声明一个公有的方法
    public function MyPublic() { }

    // 声明一个受保护的方法
    protected function MyProtected() { }

    // 声明一个私有的方法
    private function MyPrivate() { }

    // 此方法为公有
    function Foo()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // 这行能被正常执行
$myclass->MyProtected(); // 这行会产生一个致命错误
$myclass->MyPrivate(); // 这行会产生一个致命错误
$myclass->Foo(); // 公有,受保护,私有都可以执行


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 此方法为公有
    function Foo2()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate(); // 这行会产生一个致命错误
    }
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 这行能被正常执行
$myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行

class Bar 
{
    public function test() {
        $this->testPrivate();
        $this->testPublic();
    }

    public function testPublic() {
        echo "Bar::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Bar::testPrivate\n";
    }
}

class Foo extends Bar 
{
    public function testPublic() {
        echo "Foo::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>

 

<?php
class Test
{
    private 
$foo;

    public function 
__construct($foo)
    {
        
$this->foo $foo;
    }

    private function 
bar()
    {
        echo 
'Accessed the private method.';
    }

    public function 
baz(Test $other)
    {
        
// We can change the private property:
        
$other->foo 'hello';
        
var_dump($other->foo);

        
// We can also call the private method:
        
$other->bar();
    }
}

$test = new Test('test');

$test->baz(new Test('other'));
?>

以上例程会输出:

string(5) "hello"
Accessed the private method.
分享到:
评论

相关推荐

    深入PHP:面向对象、模式与实践(第3版)(源码)

    - **封装**:学习如何通过访问修饰符(public, protected, private)来控制类成员的可见性。 - **继承**:理解类的继承机制,如何创建子类并重写父类方法。 - **多态**:探究多态性如何使代码更具灵活性,以及...

    深入PHP:面向对象、模式与实践(第三版)高清PDF和完整源码下载.rar

    封装则保护了数据的安全性,通过访问修饰符(public, private, protected)控制对外部的可见性。多态性则允许不同对象对同一消息做出不同的响应,增强了代码的灵活性。 **设计模式** 设计模式是解决常见软件设计...

    PHP网站编程技术-PHP会话控制.doc

    4. 若使用Session,同样检查Session数据,但无需担心信息在客户端的可见性。 通过这个实验,开发者可以深入理解Cookie和Session在网站开发中的应用,以及它们在用户身份验证和状态管理中的作用。同时,也学习到了...

    基于PHP的WiiNews(Mobile方便手机访问的php新闻系统)源码.zip

    - **SEO优化**:如何编写元标签、URL结构优化,以提高搜索引擎的可见性。 通过分析和研究WiiNews源码,开发者不仅可以提升PHP编程技能,还能了解到Web开发的整体流程,以及如何为移动设备定制Web服务,为后续的项目...

    新闻php+phpmysql

    13. **SEO优化**:了解如何生成SEO友好的URL,使用meta标签优化页面元信息,提升搜索引擎的可见性。 这个“新闻php+phpmysql”项目是初学者练习Web开发技能的好平台,通过实际操作,可以深入理解PHP与MySQL的结合...

    PHPwen源码 模板:4240

    4. **SEO优化**:为了提高网站的搜索引擎可见性,PHPwen可能内置了搜索引擎优化(SEO)功能,如自定义元标签、友好的URL结构等。 5. **插件和扩展**:PHPwen可能支持第三方插件和模块的安装,以扩展其功能,如社交...

    php面向对象系列(完整)

    - 属性可见性:public(公共)、private(私有)、protected(受保护),控制对属性的访问权限。 - 静态属性(Static Properties):类的静态属性不会因对象的创建而创建,所有对象共享同一份值。 - 静态方法...

    基于PHP的齐博php分类信息系统.zip

    10. **SEO优化**:为了提升搜索引擎的可见性,系统可能会支持自定义元标签、生成Sitemap等功能,有助于网站在搜索引擎中的排名。 总之,基于PHP的齐博php分类信息系统利用了PHP的灵活性和强大的Web开发能力,构建了...

    PHP100视频教程24:PHP面向对象开发的学习(八).rar

    同样,可以通过访问修饰符控制对外的可见性。 4. **构造函数**:每个类可以有一个构造函数,用于在创建对象时自动执行初始化操作。在PHP5及以后版本中,构造函数使用`__construct`关键字定义。 5. **继承**:一个...

    YourPhP 2.2企业网站

    【标题】"YourPHP 2.2企业网站"是一个...通过`.htaccess`和`robots.txt`,系统可以更好地与搜索引擎互动,提升网站的可见性。同时,`admin.php`和`Install`目录的存在,确保了用户能够方便地进行后台管理和系统部署。

    PHP 关于访问控制的和运算符优先级介绍

    在PHP中,类的属性(变量)和方法可以通过三种访问修饰符来控制其可见性:public、protected和private。`public`修饰的成员可以在任何地方被访问,无论是类的内部还是外部。`protected`修饰的成员只允许在类本身及其...

    基于PHP的优优问答系统-微论坛v1.0.0源码.zip

    8. **权限管理**:为了控制不同用户的角色和权限,例如管理员、普通用户等,系统可能包含权限控制机制,如基于角色的访问控制(RBAC)。理解权限的层次和分配原则,确保数据安全。 9. **缓存技术**:为了提高性能,...

    PHP5操作手册

    类的定义更加灵活,可以通过可见性修饰符(public、private、protected)来控制成员变量和方法的访问权限。 2. 错误处理:PHP5引入了异常处理机制,允许开发者通过try/catch块来捕获和处理运行时错误,提高了代码的...

    php字典—php快速入门

    3. **访问控制**:使用`public`、`protected`、`private`定义成员的可见性。 4. **继承**:使用`extends`关键字实现类的继承。 5. **接口**:使用`interface`关键字定义接口,类通过`implements`实现接口。 ### 四...

    php 优化全通 php伪静态

    总结来说,PHP优化全通是提升网站性能的关键,而实现PHP伪静态则有助于提高网站的搜索引擎可见性。两者结合,既能保证网站运行效率,又能提升搜索引擎排名,从而带来更好的用户体验和业务增长。

    基于PHP的易酷CMS php影视视频播放系统.zip

    7. **SEO优化**:系统内置SEO优化功能,可以自定义页面标题、关键词和描述,提高搜索引擎的可见性,有助于网站流量的提升。 8. **多语言支持**:为了满足全球化需求,易酷CMS可能提供了多语言包,方便不同地区的...

    php源码:gallery-3.0.9图片管理

    - **用户管理**:Gallery-3.0.9支持多用户系统,每个用户都可以拥有自己的图片专辑,可以设置权限,控制他人对相册的访问。 - **相册管理**:用户可以创建、编辑和删除相册,自由组织图片,同时支持相册的嵌套,...

    实战突击:PHP项目开发案例整合-配套源码【第六章博客系统】

    10. **SEO优化**:为了提高搜索引擎可见性,博客系统可能实施了SEO(Search Engine Optimization)策略,如使用合适的HTML元标签、URL结构优化、生成Sitemap等。 11. **响应式设计**:考虑到多种设备访问,项目可能...

Global site tag (gtag.js) - Google Analytics