Псевдоним не выполняет магическое преобразование методов в функции, попробуйте вместо этого
<?php
use \App\Helpers\HTTP as extract_path;
echo extract_path::extract_path_from_url( 'http://example.com/test' );
Также (это должно быть само собой разумеющимся), когда вы используете псевдоним, это влияет только на пространство имен и имя класса, а не на методы класса,Они обычно используются для 1 из 2 вещей.Разрешение конфликтов имен
use NamespaceOne\Someclass;
use NamespaceTwo\Someclass as SecondClass;
Если бы они оба были помещены без псевдонима, тогда использование
Someclass::method()
было бы неоднозначным.
Второе, для чего они могут быть использованы, - это если вам нужно много классов, импортированных из одного пространства имен.Например:
use App\Exceptions\NoFile;
use App\Exceptions\FileSize;
use App\Exceptions\FileType;
throw new NoFile();
throw new FileSize();
throw new FileType();
Можно сделать так:
use App\Exceptions as E;
throw new E\NoFile();
throw new E\FileSize();
throw new E\FileType();
Что не только короче, но и проще в обслуживании, если вы измените пространство имен, вы должны изменить его только дляпсевдоним, а затем все хорошо.Короче говоря, он не предназначен для того, для чего вы хотите его использовать.
Оберните его
Вы всегда можете сделать обертку для него:
if(!function_exists('extract_path_from_url')){
function extract_path_from_url($url){
return \App\Helpers\HTTP::extract_path_from_url($url);
}
}
А потом называйте это довольным.Производительность, если у вас есть дополнительный вызов, оборачивая его, но обычно обертки облегчают поддержание.Например, если вы переименуете этот метод или класс, вы можете изменить его в оболочке, и все будет хорошо.Таким образом, для каждой из этих опций должен быть аргумент.
Вам не нужно проверять, существует ли функция, но в зависимости от того, как работает ваша система в целом, это может быть не плохой идеей, поэтому я включил еев примере только ради полноты.Лично в таком случае я не вижу проблем в том, чтобы поместить его в один файл с классом, просто не забудьте загрузить его.Если вы используете автозагрузку, функции не будут включены, если вы не загрузите файл вручную или не принудительно загрузите его.Предполагая, что больше никто не использует класс первым, конечно.
Один метод, который я действительно использовал в прошлом, который мне действительно нравится, - это создать файл с именем http_functions
(classname + _functions), а затем добавить статический метод.к классу, который регистрирует функции:
class HTTP {
public static function regester_fuctions(){
require 'http_functions.php'
}
}
Затем, когда вы вызываете HTTP::regester_fuctions()
, он автоматически загружает HTTP
класс и включает в себя все функциональные оболочки.Фактически, я делаю эту самую вещь в своем действительно супер-классном классе отладочной печати (плагин без стыдной очереди) https://github.com/ArtisticPhoenix/Debug
Просто некоторые мысли, наслаждайтесь!