Questions tagged «static-access»

7
为什么在C ++中必须在类外部分别定义静态数据成员(与Java不同)?
class A { static int foo () {} // ok static int x; // <--- needed to be defined separately in .cpp file }; 我看不到需要A::x在.cpp文件(或用于模板的同一文件)中分别定义。为什么不能同时A::x声明和定义? 是否出于历史原因被禁止使用? 我的主要问题是,如果static同时声明/定义数据成员(与Java相同)会影响任何功能吗?


4
Java-拥有完全静态的类是一个坏主意吗?
我正在一个更大的单独项目中工作,并且现在有几个类,在这些类中我看不到创建其实例的任何理由。 例如,我现在的骰子类静态地存储其所有数据,并且其所有方法也都是静态的。我不需要初始化它,因为当我想掷骰子并获得新值时,我只是使用Dice.roll()。 我有几个类似的类,它们只有一个这样的主要功能,我将开始研究一种“控制器”类,它将负责所有事件(例如,玩家移动时以及当前的转弯方向)是的),而且我发现我可以针对这一堂课遵循相同的想法。我从来没有打算为这些特定的类创建多个对象,因此使它们完全静态将是一个坏主意吗? 我想知道当涉及到Java时,这是否被视为“不好的做法”。从我所看到的,社区似乎在这个话题上有些分歧?无论如何,我希望对此进行一些讨论,并且与资源的链接也很棒!

1
为什么没有工具可以在PHP中重载静态属性?
介绍 PHP使您可以通过在类中声明魔术方法来重载方法调用和属性访问。这将启用以下代码: class Foo { public function __get($name) { return 42; } } $foo = new Foo; echo $foo->missingProperty; // prints "42" 除了重载实例属性和方法外,从PHP 5.3.0开始,我们还可以static通过覆盖magic方法来重载方法调用__callStatic。 缺少的东西 可用功能中明显缺少的是过载静态属性的能力,例如: echo Foo::$missingProperty; // fatal error: access to undeclared static property 此限制已明确记录在案: 属性重载仅在对象上下文中起作用。这些魔术方法不会在静态上下文中触发。因此,不应声明这些方法static。从PHP 5.3.0开始,如果声明了一种魔术重载方法,则会发出警告static。 但为什么? 我的问题是: 是否出于技术原因当前不支持此功能?还是(颤抖的)政治原因? 过去是否有过任何中止尝试添加此功能的尝试? 最重要的是,问题不是 “如何在userland PHP中具有动态静态属性?”。也就是说,如果您知道__callStatic要共享的特别可爱的实现,则一定要这样做。

2
静态是不好的,但是工厂模式呢?
我正在进行TDD项目,所以我尝试尽可能地坚持与这种开发相关的良好实践。其中之一是尽可能避免静态和全局。 我面临着这个问题:我有一个对象“文章”,可以将其链接到“选项”(附加的“微型文章”)。 我无法弄清楚如何拥有一种不会产生反效果或产生过多查询的好的方法,因为我将处于一种一切都分离的情况下,我基本上将需要对每个对象进行一次查询。 从我的实际角度来看,我看到3个选项: 1)构建内部文章: class Article { //[...] public function getArrOption(){ //Build an array of Options instance. //return an array of Options. } } 优点:直截了当 const:可维护性:article对象现在包含Option对象的构建逻辑。这可能会导致代码重复。 2)使用optionFactory class Article { //[...] public function getArrOption(){ return OptionFactory::buildFromArticleId($this->getId()); } } 优点:构建逻辑并非超出Article类 const:我违反了“静态很难模拟”的规则,这使得我的Article类很难测试。 3)分离所有逻辑。 //Build the array of Option instance in a …
13 php  tdd  static-access 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.