我有一个类包装器,类car,它存在于Automobile的名称空间中。然后,我有类tire,它存在于Automobile\Wheels的名称空间中。在轮胎类中,我希望从car类访问一个静态变量,但唯一的方法是引用完整的命名空间\类。
<?php
namespace Automobile;
class Car {
public static $Axle;
public function __construct() {
static::$Axle = new Axle();
}
}<?php
namespace Automobile\Wheels;
class Tire {
public $size;
public function __construct($size = 16) {
$this->size = $size;
\Automobile\Car::$Axle->add_wheel($this);
}
}我的问题是:这是一个好的做法,参考这样的课程吗?是否有任何方法来引用类,而不包括类的完整和绝对命名空间?
发布于 2016-04-12 19:14:04
做这件事并没有好的或坏的方法,尽管人们可能对此很固执己见(对缩进使用空格或制表符也是如此,但我们不要走这条路;)。只要正确引用它们,就可以使用完全限定的类名。
您可能希望使用use关键字“导入”外部类,这样可以提高可读性:
<?php
namespace Automobile\Wheels;
use Automobile\Car;
class Tire {
public $size;
public function __construct($size = 16) {
$this->size = $size;
Car::$Axle->add_wheel($this);
}
}您可能需要参考PHP文档,因为它对主题相当简洁,并且很好地洞察了如何使用名称空间。
发布于 2016-04-12 19:43:05
正如其他人所指出的,使用use作为完整的名称空间类(例如,use Automobile\Car;)。在那里,您可以在文件的其余部分使用缩短的类引用(例如Car)。
顺便说一下,如果可能的话,最好避免静态调用属性和方法。通常认为最好的做法是注入您的依赖项,因为它将您的代码解耦,并允许使用接口交换应用程序的各个部分。
我会这样做:
<?php
namespace Automobile;
class Car {
/** @var Axle */
public $axle;
public function __construct(Axle $axle) {
$this->axle = $axle;
}
}<?php
namespace Automobile\Wheels;
use Automobile\Car;
class Tire {
public $size;
public function __construct(Car $car, $size = 16) {
$this->size = $size;
$car->axle->add_wheel($this);
}
}https://stackoverflow.com/questions/36581673
复制相似问题