php - PHP 默认情况下类的可见性是多少?

标签 php oop visibility

我可以在 PHP manual 中找到属性和方法的默认可见性.但是我找不到关于类(class)本身的任何信息。

我的猜测是它是公开的。但是,如果有人可以链接到手册中所写的部分,我将不胜感激。

最佳答案

简单地说

公开。 PHP 不支持除公共(public)类之外的任何内容。

与 Java/.NET/etc 不同,它没有任何包、程序集、内部或嵌套类的概念。命名空间本质上只是避免 IncrediblyLongClassNames 的语法糖,并且不能提供对可见性的任何实际更改。

整个想法在非编译语言中意义不大,因为无论您使用什么范围,任何人仍然可以使用您的类并将其公开声明。

PHP 7 附带条件:匿名类

PHP 7 引入了 anonymous classes * 的概念,允许即时类定义。作为一个非常基本的例子:

<?php
$foo = new class {
    public function hello($what)
    {
        echo 'Hello ', $what, PHP_EOL;
    }
};

(new $foo)->hello('world');

# Hello world

因为这些可以分配给变量,所以它们可以限制在该变量的范围内,并像其他任何变量一样传递。

与大多数允许匿名类的语言不同,在 PHP 中,它们从定义它们的范围继承任何东西。链接文档中有一些示例,说明如何通过将匿名类定义为从父类继承或传入构造函数参数来解决此问题。

*严格来说,在幕后他们确实有名字,因此如果有人可以在实例上运行 get_class() 那么他们就可以实例化他们自己的副本,因为 they aren't garbage collected

关于php - PHP 默认情况下类的可见性是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38455380/

相关文章:

javascript - Gmail 的 JavaScript 中使用的设计模式?

java - 类和函数结构(Java)

android - 在对象之间共享实例的最佳实践

php - 在一个 PHP 文件中运行 2 个 MySQL 更新查询

PHP:反洪水/垃圾邮件系统

php - 为什么我不能使用这样的开关?

java - java中不同的子类对父类的方法是否有可能有不同的可见性

php - 重新声明功能适用于旧服务器但不适用于新服务器

php - 是否可以以选项卡形式将 MySQL 记录 'id' 从一个选项卡传递到另一个选项卡?

java - 我有两个水平 ScrollView 。如何一次显示一个并通过单击按钮在它们之间切换?