如何在php中使用受保护的静态文件?

如何在php中使用受保护的静态文件?,php,Php,以上代码取自一个网站 问题: 我知道:protected只能在类本身内部以及由继承类和父类访问。static使它们可以访问,而不需要类的实例化。但通常在哪种情况下我们使用受保护的静电?谁能给我举个活生生的例子?谢谢。不能在静态方法内部调用非静态方法(不实例化类)。受保护的静态将使其无法从外部类访问,但仍然可以从公共静态方法访问。这可能是将代码的复杂部分拆分为更易于维护的块,或者如果在另一个静态方法中存在狭窄的重用范围。引用我自己的话: 静态类属性对于静态数据很有用。即数据 类实例所依赖的,但它永

以上代码取自一个网站

问题:


我知道:protected只能在类本身内部以及由继承类和父类访问。static使它们可以访问,而不需要类的实例化。但通常在哪种情况下我们使用受保护的静电?谁能给我举个活生生的例子?谢谢。

不能在静态方法内部调用非静态方法(不实例化类)。受保护的静态将使其无法从外部类访问,但仍然可以从公共静态方法访问。这可能是将代码的复杂部分拆分为更易于维护的块,或者如果在另一个静态方法中存在狭窄的重用范围。

引用我自己的话:

静态类属性对于静态数据很有用。即数据 类实例所依赖的,但它永远不会改变,并且是 可能很大。完全假设的例子:

protected static $table = array(
            'createQuery' => 'CREATE TABLE IF NOT EXISTS `xf_user_notes` (
            `note_id` int(10) NOT NULL AUTO_INCREMENT,
            `given_user_id` int(10) NOT NULL,
            `received_user_id` int(10) NOT NULL,
            `note_message` VARCHAR(255) NOT NULL,
            `note_date` int(11) NOT NULL,
              PRIMARY KEY (`note_id`)
        ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;',
            'dropQuery' => 'DROP TABLE IF EXISTS `xf_user_notes`'
    );
让我们假设这个数据库类需要使用不同的 来自数据库的数据类型,并将数据库类型映射到 内部类型。为此,它需要一个类型映射。这张地图永远是最好的 对于
数据库
的每个实例都是相同的,并由多种方法使用
数据库
。那么,为什么不让它成为一个
静态的
属性呢
已修改但仅从中读取?它节省了一点内存,
因为数据在
数据库的所有实例之间共享。自从
数据只能从类本身内部访问,这是
不会创建任何外部依赖项。静态属性应
永远不要公开访问,因为那时它们只是全球性的
变量。我们已经看到了结果

静态属性还可以用于缓存某些不可用的数据 一个类的所有实例在计算后都是相同的 并且可以作为优化在实例之间轻松共享。有 在某些情况下,这是有用的。主要是静态特性 如果提供优化技术,则不应将其视为 编程哲学


静态方法通常只不过是助手方法,其中包含您可能不想公开的代码。请看,大约在最后三分之一。您是否阅读了通过谷歌搜索“在何种情况下我们使用受保护的静态”(您自己的措辞)可以找到的众多页面中的任何一页?你能给我举个例子让我更好地理解吗?看来你主要谈论的是静电,那么“受保护的静电”呢?你能举个简单的例子吗?保护静电没有什么特别的。代码示例显示了受保护的静态代码。相反,
publicstatic
只是一个全局变量,应该避免。
class Database {

    protected static $types = array(
        'int'    => array('internalType' => 'Integer', 'precision' => 0,      ...),
        'string' => array('internalType' => 'String',  'encoding'  => 'utf-8', ...),
        ...
    )

}