Hướng dẫn php call function with namespace - hàm gọi php với không gian tên

Bằng cách thêm các bản hack trợ giúp được đề cập dưới đây, bạn có thể nhập mọi thứ từ không gian tên Hamcrest vào không gian tên hiện tại bằng cách gọi:

import_namespace('Hamcrest', __NAMESPACE__);

Dưới đây là các hack, function_alias hoạt động như http://www.php.net/manual/en/function. class-alias.php trừ khi hoạt động trên các chức năng:

function function_alias ($original, $alias) {

  $args = func_get_args();
  assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
  assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
"function_alias(): '$original' is not a valid function name");
  assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
    "function_alias(): '$alias' is not a valid function name");

  $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
  $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
  $serializedOriginal = var_export($original, true);

  eval("
    namespace $aliasNamespace {
      function $aliasName () {
        return call_user_func_array($serializedOriginal, func_get_args());
      }
    }
  ");

}

Kết hợp với nhà nhập khẩu không gian tên:

function import_namespace ($source, $destination) {

  $args = func_get_args();
  assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
  assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
    "import_namespace(): '$destination' is not a valid namespace name");
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
    "import_namespace(): '$source' is not a valid namespace name");

  foreach(get_declared_classes() as $class)
    if (strpos($class, $source . '\\') === 0)
      class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));

  $functions = get_defined_functions();
  foreach(array_merge($functions['internal'], $functions['user']) as $function)
    if (strpos($function, $source . '\\') === 0)
      function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
}

11 năm trước

(Php 5> = 5.3.0, Php 7, Php 8)

  1. Trước khi thảo luận về việc sử dụng các không gian tên, điều quan trọng là phải hiểu làm thế nào PHP biết phần tử tên nào được yêu cầu. Một sự tương tự đơn giản có thể được thực hiện giữa các không gian tên PHP và hệ thống tập tin. Có ba cách để truy cập một tệp trong hệ thống tệp:
  2. Tên tệp tương đối như foo.txt. Điều này giải quyết cho currentdirectory/foo.txt trong đó hiện tại là thư mục hiện đang bị chiếm. Vì vậy, nếu thư mục hiện tại là /home/foo, tên được giải quyết thành /home/foo/foo.txt.
  3. Tên đường dẫn tương đối như subdirectory/foo.txt. Điều này giải quyết đến currentdirectory/subdirectory/foo.txt.

Tên đường dẫn tuyệt đối như /main/foo.txt. Điều này giải quyết đến /main/foo.txt.

  1. Nguyên tắc tương tự có thể được áp dụng cho các yếu tố đặt tên trong PHP. Ví dụ, một tên lớp có thể được đề cập theo ba cách: One caveat: unqualified names for functions and constants will resolve to global functions and constants if the namespaced function or constant is not defined. See Using namespaces: fallback to global function/constant for details.
  2. Tên không đủ tiêu chuẩn, hoặc một tên lớp không bị hủy bỏ như
    function function_alias ($original, $alias) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
      assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
    "function_alias(): '$original' is not a valid function name");
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
        "function_alias(): '$alias' is not a valid function name");
    
      $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
      $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
      $serializedOriginal = var_export($original, true);
    
      eval("
        namespace $aliasNamespace {
          function $aliasName () {
            return call_user_func_array($serializedOriginal, func_get_args());
          }
        }
      ");
    
    }
    
    1 hoặc
    function function_alias ($original, $alias) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
      assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
    "function_alias(): '$original' is not a valid function name");
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
        "function_alias(): '$alias' is not a valid function name");
    
      $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
      $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
      $serializedOriginal = var_export($original, true);
    
      eval("
        namespace $aliasNamespace {
          function $aliasName () {
            return call_user_func_array($serializedOriginal, func_get_args());
          }
        }
      ");
    
    }
    
    2. Nếu không gian tên hiện tại là
    function function_alias ($original, $alias) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
      assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
    "function_alias(): '$original' is not a valid function name");
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
        "function_alias(): '$alias' is not a valid function name");
    
      $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
      $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
      $serializedOriginal = var_export($original, true);
    
      eval("
        namespace $aliasNamespace {
          function $aliasName () {
            return call_user_func_array($serializedOriginal, func_get_args());
          }
        }
      ");
    
    }
    
    3, điều này sẽ giải quyết thành
    function function_alias ($original, $alias) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
      assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
    "function_alias(): '$original' is not a valid function name");
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
        "function_alias(): '$alias' is not a valid function name");
    
      $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
      $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
      $serializedOriginal = var_export($original, true);
    
      eval("
        namespace $aliasNamespace {
          function $aliasName () {
            return call_user_func_array($serializedOriginal, func_get_args());
          }
        }
      ");
    
    }
    
    4. Nếu mã là mã toàn cầu, không được ký tên, thì điều này sẽ giải quyết thành
    function function_alias ($original, $alias) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
      assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
    "function_alias(): '$original' is not a valid function name");
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
        "function_alias(): '$alias' is not a valid function name");
    
      $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
      $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
      $serializedOriginal = var_export($original, true);
    
      eval("
        namespace $aliasNamespace {
          function $aliasName () {
            return call_user_func_array($serializedOriginal, func_get_args());
          }
        }
      ");
    
    }
    
    5. Một cảnh báo: Tên không đủ tiêu chuẩn cho các hàm và hằng số sẽ giải quyết cho các chức năng và hằng số toàn cầu nếu hàm tên hoặc hằng số không được xác định. Xem bằng cách sử dụng không gian tên: dự phòng vào chức năng/hằng số toàn cầu để biết chi tiết.
  3. Tên đủ điều kiện hoặc tên lớp có tiền tố như
    function function_alias ($original, $alias) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
      assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
    "function_alias(): '$original' is not a valid function name");
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
        "function_alias(): '$alias' is not a valid function name");
    
      $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
      $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
      $serializedOriginal = var_export($original, true);
    
      eval("
        namespace $aliasNamespace {
          function $aliasName () {
            return call_user_func_array($serializedOriginal, func_get_args());
          }
        }
      ");
    
    }
    
    6 hoặc
    function function_alias ($original, $alias) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
      assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
    "function_alias(): '$original' is not a valid function name");
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
        "function_alias(): '$alias' is not a valid function name");
    
      $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
      $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
      $serializedOriginal = var_export($original, true);
    
      eval("
        namespace $aliasNamespace {
          function $aliasName () {
            return call_user_func_array($serializedOriginal, func_get_args());
          }
        }
      ");
    
    }
    
    7. Nếu không gian tên hiện tại là
    function function_alias ($original, $alias) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
      assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
    "function_alias(): '$original' is not a valid function name");
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
        "function_alias(): '$alias' is not a valid function name");
    
      $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
      $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
      $serializedOriginal = var_export($original, true);
    
      eval("
        namespace $aliasNamespace {
          function $aliasName () {
            return call_user_func_array($serializedOriginal, func_get_args());
          }
        }
      ");
    
    }
    
    3, điều này sẽ giải quyết thành
    function function_alias ($original, $alias) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
      assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
    "function_alias(): '$original' is not a valid function name");
      assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
        "function_alias(): '$alias' is not a valid function name");
    
      $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
      $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
      $serializedOriginal = var_export($original, true);
    
      eval("
        namespace $aliasNamespace {
          function $aliasName () {
            return call_user_func_array($serializedOriginal, func_get_args());
          }
        }
      ");
    
    }
    
    9. Nếu mã là mã toàn cầu, không được ký tên, thì điều này sẽ giải quyết thành
    function import_namespace ($source, $destination) {
    
      $args = func_get_args();
      assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
      assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');
    
      // valid function name - http://php.net/manual/en/functions.user-defined.php
      assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
        "import_namespace(): '$destination' is not a valid namespace name");
      assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
        "import_namespace(): '$source' is not a valid namespace name");
    
      foreach(get_declared_classes() as $class)
        if (strpos($class, $source . '\\') === 0)
          class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));
    
      $functions = get_defined_functions();
      foreach(array_merge($functions['internal'], $functions['user']) as $function)
        if (strpos($function, $source . '\\') === 0)
          function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
    }
    
    0.

Tên đủ điều kiện hoặc tên tiền tố với toán tử tiền tố toàn cầu như

function import_namespace ($source, $destination) {

  $args = func_get_args();
  assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
  assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
    "import_namespace(): '$destination' is not a valid namespace name");
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
    "import_namespace(): '$source' is not a valid namespace name");

  foreach(get_declared_classes() as $class)
    if (strpos($class, $source . '\\') === 0)
      class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));

  $functions = get_defined_functions();
  foreach(array_merge($functions['internal'], $functions['user']) as $function)
    if (strpos($function, $source . '\\') === 0)
      function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
}
1 hoặc
function import_namespace ($source, $destination) {

  $args = func_get_args();
  assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
  assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
    "import_namespace(): '$destination' is not a valid namespace name");
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
    "import_namespace(): '$source' is not a valid namespace name");

  foreach(get_declared_classes() as $class)
    if (strpos($class, $source . '\\') === 0)
      class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));

  $functions = get_defined_functions();
  foreach(array_merge($functions['internal'], $functions['user']) as $function)
    if (strpos($function, $source . '\\') === 0)
      function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
}
2. Điều này luôn giải quyết cho tên theo nghĩa đen được chỉ định trong mã,
function function_alias ($original, $alias) {

  $args = func_get_args();
  assert('count($args) == 2', 'function_alias(): requires exactly two arguments');
  assert('is_string($original) && is_string($alias)', 'function_alias(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $original) > 0',
"function_alias(): '$original' is not a valid function name");
  assert('preg_match(\'/^[a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*$/\', $alias) > 0',
    "function_alias(): '$alias' is not a valid function name");

  $aliasNamespace = substr($alias, 0, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') : 0);
  $aliasName = substr($alias, strrpos($alias, '\\') !== false ? strrpos($alias, '\\') + 1 : 0);
  $serializedOriginal = var_export($original, true);

  eval("
    namespace $aliasNamespace {
      function $aliasName () {
        return call_user_func_array($serializedOriginal, func_get_args());
      }
    }
  ");

}
4.

file1.php

function import_namespace ($source, $destination) {

  $args = func_get_args();
  assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
  assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
    "import_namespace(): '$destination' is not a valid namespace name");
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
    "import_namespace(): '$source' is not a valid namespace name");

  foreach(get_declared_classes() as $class)
    if (strpos($class, $source . '\\') === 0)
      class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));

  $functions = get_defined_functions();
  foreach(array_merge($functions['internal'], $functions['user']) as $function)
    if (strpos($function, $source . '\\') === 0)
      function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
}
4

function import_namespace ($source, $destination) {

  $args = func_get_args();
  assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
  assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
    "import_namespace(): '$destination' is not a valid namespace name");
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
    "import_namespace(): '$source' is not a valid namespace name");

  foreach(get_declared_classes() as $class)
    if (strpos($class, $source . '\\') === 0)
      class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));

  $functions = get_defined_functions();
  foreach(array_merge($functions['internal'], $functions['user']) as $function)
    if (strpos($function, $source . '\\') === 0)
      function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
}
5

function import_namespace ($source, $destination) {

  $args = func_get_args();
  assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
  assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
    "import_namespace(): '$destination' is not a valid namespace name");
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
    "import_namespace(): '$source' is not a valid namespace name");

  foreach(get_declared_classes() as $class)
    if (strpos($class, $source . '\\') === 0)
      class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));

  $functions = get_defined_functions();
  foreach(array_merge($functions['internal'], $functions['user']) as $function)
    if (strpos($function, $source . '\\') === 0)
      function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
}
6

file2.php

function import_namespace ($source, $destination) {

  $args = func_get_args();
  assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
  assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
    "import_namespace(): '$destination' is not a valid namespace name");
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
    "import_namespace(): '$source' is not a valid namespace name");

  foreach(get_declared_classes() as $class)
    if (strpos($class, $source . '\\') === 0)
      class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));

  $functions = get_defined_functions();
  foreach(array_merge($functions['internal'], $functions['user']) as $function)
    if (strpos($function, $source . '\\') === 0)
      function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
}
7

function import_namespace ($source, $destination) {

  $args = func_get_args();
  assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
  assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
    "import_namespace(): '$destination' is not a valid namespace name");
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
    "import_namespace(): '$source' is not a valid namespace name");

  foreach(get_declared_classes() as $class)
    if (strpos($class, $source . '\\') === 0)
      class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));

  $functions = get_defined_functions();
  foreach(array_merge($functions['internal'], $functions['user']) as $function)
    if (strpos($function, $source . '\\') === 0)
      function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
}
5

function import_namespace ($source, $destination) {

  $args = func_get_args();
  assert('count($args) == 2', 'import_namespace(): requires exactly two arguments');
  assert('is_string($source) && is_string($destination)', 'import_namespace(): requires string arguments');

  // valid function name - http://php.net/manual/en/functions.user-defined.php
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $source) > 0',
    "import_namespace(): '$destination' is not a valid namespace name");
  assert('preg_match(\'/^([a-zA-Z_\x7f-\xff][\\\\\\\\a-zA-Z0-9_\x7f-\xff]*)?$/\', $destination) > 0',
    "import_namespace(): '$source' is not a valid namespace name");

  foreach(get_declared_classes() as $class)
    if (strpos($class, $source . '\\') === 0)
      class_alias($class, $destination . ($destination ? '\\' : '') . substr($class, strlen($source . '\\')));

  $functions = get_defined_functions();
  foreach(array_merge($functions['internal'], $functions['user']) as $function)
    if (strpos($function, $source . '\\') === 0)
      function_alias($function, $destination . ($destination ? '\\' : '') . substr($function, strlen($source . '\\')));
}
9

Lưu ý rằng để truy cập bất kỳ lớp toàn cầu, hàm hoặc hằng số, có thể sử dụng tên đủ điều kiện, chẳng hạn như \ strlen () hoặc \ Exception hoặc foo.txt0.\strlen() or \Exception or foo.txt0.

Ví dụ #1 truy cập các lớp, chức năng và hằng số toàn cầu từ trong không gian tên

foo.txt1

foo.txt2

foo.txt3

Richard tại Richard-sumilang dot com

14 năm trước

foo.txt4

foo.txt5

foo.txt6

foo.txt7

foo.txt8

Ẩn danh ¶

8 năm trước

foo.txt9

currentdirectory/foo.txt0

currentdirectory/foo.txt1

Lukas Z

10 năm trước

currentdirectory/foo.txt2

currentdirectory/foo.txt3

currentdirectory/foo.txt4

Tom tại Tomwardrop Dot Com ¶

10 năm trước

currentdirectory/foo.txt5

currentdirectory/foo.txt6

currentdirectory/foo.txt7

currentdirectory/foo.txt8

Tom tại Tomwardrop Dot Com ¶

Philip Dot Preisser tại Arcor Dot de ¶

currentdirectory/foo.txt9

/home/foo0

/home/foo1

/home/foo2