2013-06-22 39 views
2
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`' 
    ); 

以上代码取自一个网站。如何在php中使用受保护的静态?

问:

我知道:保护只能在类本身和继承和家长classes.static使他们无需类的实例访问的访问。但通常在哪种情况下我们使用受保护的静态?谁能给我一个生动的例子?谢谢。

+0

静态方法通常只不过是辅助方法,你可能不想公开代码。 –

+0

请参阅http://kunststube.net/static,最后三分之一。 – deceze

+0

您是否阅读过使用Google搜索“在哪种情况下使用受保护的静态”(您自己的措辞)的众多页面? – mzedeler

回答

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的所有实例之间共享。由于 数据只能从类内部访问,因此此 不会创建任何外部依赖关系。静态属性 永远不会公开访问,因为它们只是全局变量 。我们已经看到了......

静态属性也可能有助于缓存一些类别的所有实例相同的数据,一旦它被计算出来,并且可以很容易地在实例间优化共享。有些 这样的情况下,这是有用的。静态属性主要是 提供了一种优化技术,他们不应该被看作是编程理念。

+0

看来你主要谈论静态,那么'受保护静态'怎么样?你能举一个简单的例子吗? – user2507818

+0

* protected * static没有什么特别之处。代码示例显示了'protected static'。相反,'public static'只是一个全局变量,应该避免。 – deceze

0

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

+0

你能给我一个更好理解的例子吗? – user2507818

相关问题