首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位于当前命名空间前面的命名空间。

位于当前命名空间前面的命名空间。
EN

Stack Overflow用户
提问于 2016-04-12 18:51:47
回答 2查看 62关注 0票数 0

我有一个类包装器,类car,它存在于Automobile的名称空间中。然后,我有类tire,它存在于Automobile\Wheels的名称空间中。在轮胎类中,我希望从car类访问一个静态变量,但唯一的方法是引用完整的命名空间\类。

代码语言:javascript
复制
<?php

namespace Automobile;

class Car {
    public static $Axle;

    public function __construct() {
        static::$Axle = new Axle();
    }
}
代码语言:javascript
复制
<?php

namespace Automobile\Wheels;

class Tire {
    public $size;
    public function __construct($size = 16) {
        $this->size = $size;

        \Automobile\Car::$Axle->add_wheel($this);
    }
}

我的问题是:这是一个好的做法,参考这样的课程吗?是否有任何方法来引用类,而不包括类的完整和绝对命名空间?

EN

回答 2

Stack Overflow用户

发布于 2016-04-12 19:14:04

做这件事并没有好的或坏的方法,尽管人们可能对此很固执己见(对缩进使用空格或制表符也是如此,但我们不要走这条路;)。只要正确引用它们,就可以使用完全限定的类名。

您可能希望使用use关键字“导入”外部类,这样可以提高可读性:

代码语言:javascript
复制
<?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文档,因为它对主题相当简洁,并且很好地洞察了如何使用名称空间。

票数 1
EN

Stack Overflow用户

发布于 2016-04-12 19:43:05

正如其他人所指出的,使用use作为完整的名称空间类(例如,use Automobile\Car;)。在那里,您可以在文件的其余部分使用缩短的类引用(例如Car)。

顺便说一下,如果可能的话,最好避免静态调用属性和方法。通常认为最好的做法是注入您的依赖项,因为它将您的代码解耦,并允许使用接口交换应用程序的各个部分。

我会这样做:

代码语言:javascript
复制
<?php

namespace Automobile;

class Car {
    /** @var Axle */
    public $axle;

    public function __construct(Axle $axle) {
        $this->axle = $axle;
    }
}
代码语言:javascript
复制
<?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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36581673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档