簡體   English   中英

PHP可以將命名空間擴展為本機使用類外的函數

[英]PHP is it possible to extend a namespace to natively use functions outside of class

好的是這個場景:

這是兩個示例類。

  1. 第一個定義了類名外的一些函數。
  2. 我希望第二個類能夠實現它,就像它本地定義一樣。

我經常使用一些功能。

因此,我需要它們盡可能地縮短可讀性和寫入速度。

如果我可以將它們粘貼在命名空間中並以某種方式擴展它,它還可以防止其他庫中可能存在的沖突。

基類

namespace Core;

class Base{
  ......
}

function set($array, $path=null, $value=null){
  .....
}

function get($array, $path=null){
  .....
}

二等

namespace Core\Config;

class Config{
  public function __construct($array){
    $conf = get($array, 'key1.key2.key3');
    .... do something with returned value ....
  }
}

我沒有看到如何在類中使用functions ,即使它們在沒有$this->$object->的同一個functions也是如此。 我可以非常粗略地提供的解決方案是實例化Base類,如果你不能擴展它(一個名為Base的類似乎應該擴展,但無論如何):

namespace Core\Config;

class Config{

  private $_base;

  public function __construct($array){
    $this->_base = new Core\Base();
    $conf = $this->_base->get($array, 'key1.key2.key3');

或者,包裝它們:

class Config {

    public function get($array, $path=null) {
        $base = new Core\Base();
        return $base->get($array, $path);
    }

    public function __construct($array) {
        $conf = $this->get($array, 'key1.key2.key3');
    }

好的,現在我看,它們是一個包含類的文件中的函數。

namespace Core\Config;
use Core;
class Config {
    public function __construct($array) {
            $conf = Core\get($array, 'key1.key2.key3');
        }

或者,為了減少工作量,您可以將gore別名as C

有人已經滿足,但不是以正確的方式:

<?php
namespace Base {
    function get() {...}
}

namespace Base\Config {
    use \Base as B;

    class Config {
        public function __construct(...) {
            $something = B\get(...);
        }
    }
} 

您可以導入和命名Base命名空間並使用它。
但是,您無法導入函數或常量(僅限類和接口)

參考: PHP.net


另請注意,您無法在類名外的類中定義函數
你正在做的是在一個文件中定義一個類和幾個“獨立”函數,但它們在某種程度上沒有關系(盡管它們在同一個命名空間中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM