Nano Hash - криптовалюты, майнинг, программирование

использовать глобальное пространство имен;

Мне просто интересно, есть ли способ заставить класс вести себя так, как будто он находится в глобальном пространстве имен, используя ключевое слово «использовать», чтобы этот класс вел себя как класс с пространством имен только снаружи класса. Что-то типа:

namespace wherever\somewhere\deep\deep\inside;
use \; // root namespace.. note: this doesn't work
class stuff{
//....
}

кто угодно?

08.01.2013

  • Вы хотите, чтобы ваш класс stuff находился в глобальном пространстве имен? 08.01.2013
  • Нет, я хочу, чтобы он оставался в пространстве имен, в котором он находится, это нарушит другие зависимости, и я не могу изменить другие зависимости, это нарушит автозагрузчик. Я хочу, чтобы это был просто быстрый взлом, всего на день или два, прежде чем я все исправлю. У меня есть куча таких классов. 08.01.2013

Ответы:


1

Использование глобального пространства имен не будет работать так, как вы ожидаете.

По умолчанию вы можете ссылаться на класс с глобальным пространством имен, добавляя обратную косую черту, например, $x = new \PDO(...);. Попытка use \ этого не изменит.

Если вы хотите удалить обратную косую черту из классов с глобальным пространством имен, вам нужно use конкретно для каждого из них. В PHP с пространством имен предполагается, что любая ссылка на класс, не имеющая пространства имен, находится в текущем пространстве имен, если на нее явно не ссылается оператор use.

eg:

use \PDO, \SplFileObject;

теперь мы можем вызывать new PDO(...) или new SplFileObject() без обратной косой черты. Но другим глобальным классам, которых нет в use, все равно потребуется обратная косая черта.

08.01.2013
  • Ага, вижу. Я думал, что могу импортировать пространство имен, используя use \SomeNamespace, и предположил, что могу сделать то же самое с глобальным пространством имен. Но теперь я читаю, он импортирует его как подпространство имен текущего пространства имен. Боже, я должен был проверить это, прежде чем я начал перемещать эти классы :) Спасибо за ответ. 08.01.2013
  • согласитесь с этим «черт возьми» - переход от кода без пространства имен к коду с пространством имен в PHP - это больше рутинной работы, чем должно быть. Но ободритесь; как только вы заработаете, все в порядке. :-) 08.01.2013

  • 2

    Вы можете получить доступ к глобальному пространству имен, если используете такие скобки:

    namespace My\Space {
        function myScopedFunction() { .. }
    }
    namespace {
        function myGlobalFunction() { .. }
    }
    
    29.06.2017

    3

    Я не думаю, что вы можете. Если кто-нибудь найдет хороший способ, пожалуйста, поделитесь. Я попробовал следующее, что явно не сработало (запись здесь http://www.siteconsortium.com/h/D0000H.php). Я бы счел очень полезным иметь возможность обращаться к корневому пространству имен таким образом, поскольку многие устаревшие коды не используют пространства имен.

    $root = \_\_NAMESPACE\_\_;   // error 
    
    namespace AA; 
    function foo() { print " What AA "; }
    
    use ($root);      // error
    
    namespace $root;  // error can't use var
    
    namespace ""; // error
    
    use "/"; // error
    
    namespace "/";   // error
    

    Здесь есть несколько разных проблем. Мне показалось странным, что я могу использовать ключевое слово require_once $script_name, но не могу использовать ключевое слово namespace $namespace_name.

    09.01.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..