PHP OOP如何对配置数据进行分组
我想在一些对象中存储一些配置数据,但我有一个问题PHP OOP如何对配置数据进行分组,php,oop,constants,Php,Oop,Constants,我想在一些对象中存储一些配置数据,但我有一个问题 class B { const attr1 = 'something1'; const attr2 = 'something2'; const attr3 = 'something3'; } class A { const attr1 = 'somethingA1'; const attr2 = 'somethingA2'; const attr3 = 'somethingA3'; const b = <---
class B {
const attr1 = 'something1';
const attr2 = 'something2';
const attr3 = 'something3';
}
class A {
const attr1 = 'somethingA1';
const attr2 = 'somethingA2';
const attr3 = 'somethingA3';
const b = <---- i wanna put here a reference of B, but B as a class (not an object...), i'm crazy?
}
B类{
常量attr1='something1';
常量attr2='something2';
常量attr3='something3';
}
甲级{
常量attr1='somethingA1';
常量attr2='somethingA2';
常量attr3='somethingA3';
常数b=您可以简单地说b=“b”
如果你想创建B的对象,你可以做新建B
或者访问属性你不能引用这样的类,因为你使用这个类的唯一方法就是通过一个对象,所以尝试这样做也没有意义
此用户:
class A {
const attr1 = 'somethingA1';
const attr2 = 'somethingA2';
const attr3 = 'somethingA3';
public $b;
function __construct() {
$this -> b = new b();
}
没有办法为类分配引用,也没有办法在运行时分配类常量。因此,您的整个方法几乎是不可能的。您可以做的是
const b = 'B'
从PHP5.3.0开始,您可以
$b = A::b;
echo $b::attr1;
但是您不能执行A::b::attr1
。这将引发T\u PAAMAYIM\u NEKUDOTAYIM
错误。这是解析器的限制。在撰写本文时,PHP无法执行此操作
因为类B包含a的一组数据,我想在B(a的)中存储一个复杂的数据,我想这样做,因为我想保持代码干净
您可以很容易地解决这个问题,例如,您可以在创建A
class A
{
private $b;
public function __construct(B $b)
{
$this->b = $b;
}
}
$a = new A(new B);
或者,例如
因为B
只是A
的数据部分,而不是先抓住B
然后使用B的方法。因此,任何使用A
的代码都不需要知道A
中有一些B
。这将允许您轻松地更改B
,而无需担心消耗的代码A
,例如,要获取attr1
您需要向A
添加一个getter:
public function getAttr1()
{
$b = $this->b;
return $b::attr1;
}
public function getAttr1()
{
return $this->b->getAttr1();
}
在B
中使用属性而不是常量时,您可以减轻对赋值的笨拙需求(在PHP中常量很愚蠢,因为您必须将它们视为公共API),例如
然后您可以在A
中执行以下操作:
public function getAttr1()
{
$b = $this->b;
return $b::attr1;
}
public function getAttr1()
{
return $this->b->getAttr1();
}
更好的做法是,不要通过A
公开B
的内部结构。这将使API更小,代码更面向对象。为什么要这样做?因为类B包含A的一组数据,我想存储在B(A的)中一个复杂的数据,我想这样做,因为我想保持代码干净,我知道我只能使类a具有所有属性…我不知道你在做什么,但它肯定不会使代码干净…你不能使用一个嵌套了多个数组的数组来分组你的配置,如果你必须的话,我想你可以使用一个单独的私有数组数组,并提供适当的acessor。Sry的家伙们,我的英语不好,顺便说一句,Tom理解我,这是我的第一个单独的php项目,我想“分组我的配置数据”这就是重点,我会使用oop来做这件事…是的,但是OP需要先创建一个A的实例,然后s/他才能访问B。s/他不能执行A::B::attr1
,也不能执行$A->B::attr1
。你应该将此添加到你的答案中以使其完整。谢谢你的解释,我已经在使用你的第二个解决方案了(在A中创建B),但在我看来,这不是最好的解决方案(因为我必须实例化A,但我并不真正需要实例),但我认为这不是另一种方法(现在:P)。@cl0udw4lk3r如果你使用OOP,通常会有实例。如果你发现使用类、常量和静态进行编码,那么你就改为使用基于类的编程。看看