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`'
);
以上代码来自一个网站。
问题:
我知道:只能在类本身内部以及通过继承和父类访问protected.static使它们可以访问而无需实例化类。但通常在哪种情况下我们使用受保护的静态?任何人都可以给我一个现实的例子吗?感谢。
答案 0 :(得分:0)
无法在静态方法中调用非静态方法(不实例化类)。 protected static会使其无法从外部类访问,但仍可从公共静态方法访问。这可能是将代码的复杂部分拆分为更易于维护的块,或者如果在另一个静态方法中存在狭窄的重用。
答案 1 :(得分:0)
从here引用自己:
静态类属性对于静态数据非常有用。也就是数据 一个类实例依赖,但它永远不会改变 可能很大。完全假设的例子:
class Database { protected static $types = array( 'int' => array('internalType' => 'Integer', 'precision' => 0, ...), 'string' => array('internalType' => 'String', 'encoding' => 'utf-8', ...), ... ) }
让我们假设这个数据库类需要做一些不同的事情 来自数据库并将数据库类型映射到的数据类型 内部类型。要做到这一点,它需要一个类型映射。这张地图永远是 对于
Database
的每个实例都是相同的,并且由几种方法使用Database
。好吧,为什么不把它变成static
属性,这绝不是 修改但只读过?它节省了一点内存, 因为数据在Database
的所有实例之间共享。以来 这个数据只能从类本身内部访问 不会创建任何外部依赖项。静态属性应该 永远不会公开访问,从那以后它们只是全球性的 变量。我们已经看到了那里......静态属性也可用于缓存某些数据 一旦计算出类的所有实例,它们就相同 并且可以作为优化轻松地跨实例共享。有 一些这样的实例,这是有用的。静态属性大多数 提出一种优化技术,它们不应被视为一种优化技术 编程哲学。