Проблема с получением libphonenumber для работы с автозагрузчиком. Переполнение стека

Добрый день,

Я не могу использовать структуру libphonenumber с помощью autoloader.php с spl_autoload_register.
Я не использую композитор, но хочу использовать автозагрузчик PSR4.

Я попробовал несколько примеров, найденных здесь и в других местах, но безуспешно.

Например:
Мой путь к сценарию: /opt/lampp/htdocs/project/incl/register.php

Путь к платформе: / opt / lampp / htdocs / project / incl / libphonenumber

в autoloader.php

<?php
spl_autoload_register(function($class) {
$prefix = 'libphonenumber'; // namespace prefix
$base_dir = __DIR__.DIRECTORY_SEPARATOR.$prefix.DIRECTORY_SEPARATOR; // base directory for the namespace prefix

echo 'base-dir: ', var_dump($base_dir), '<br>';
echo 'class: ', var_dump($class), '<br>';

// does the class use the namespace prefix?
$len = strlen($prefix);

echo 'strncmp: ', var_dump(strncmp($prefix, $class, strlen($prefix))), '<br>';
echo 'relative class: ', var_dump(substr($class, strlen($prefix))), '<br>';

if (strncmp($prefix, $class, $len) !== 0) {  // using this on "PhoneNumberUtil" doesn't make sense
return; // no, move to the next registered autoloader
}

// get the relative class name
$relative_class = substr($class, $len);  // using this on "PhoneNumberUtil" doesn't make sense

// replace the namespace prefix with the base directory, replace namespace separators with directory separators in the relative class name, append with .php
// $file = $base_dir.str_replace('\\', '/', $relative_class).'.php';
echo 'file with relative-class: ', var_dump($base_dir.str_replace('\\', '/', $relative_class).'.php'), '<br>';
$file = $base_dir.str_replace('\\', '/', $class).'.php';
echo 'file: ', var_dump($file), '<br>';

// if the file exists, require it
if (file_exists($file)) { require_once $file; }
});

Результат:

base-dir: string (46) «/ opt / lampp / htdocs / project / incl / libphonenumber /»

класс: string (15) «PhoneNumberUtil»

strncmp: int (1)

относительный класс: string (1) «l»

файл с относительным классом: string (51) «/opt/lampp/htdocs/project/incl/libphonenumber/l.php»

file: string (65) «/opt/lampp/htdocs/project/incl/libphonenumber/PhoneNumberUtil.php»

PhoneNumberUtil.php загружается последней строкой.

Код в register.php:

include_once 'autoloader.php';

$phone_util = PhoneNumberUtil::getInstance();

Результат:

Неустранимая ошибка: класс «PhoneNumberUtil» не найден в /opt/lampp/htdocs/project/incl/register.php

Пробовал с другим autoloader.php:

<?php
spl_autoload_register(function($className) {
include __DIR__.'/libphonenumber/'.str_replace('\\', DIRECTORY_SEPARATOR, $className).'.php';
});

Тот же результат:

Неустранимая ошибка: класс «PhoneNumberUtil» не найден в /opt/lampp/htdocs/project/incl/register.php

Может кто-нибудь сказать, пожалуйста, что я делаю не так?

РЕДАКТИРОВАТЬ

Еще немного информации:

Я хочу использовать пакет libphonenumber из https://github.com/giggsey/libphonenumber-for-php

Я попытался следовать примеру для autoloader.php, как показано там, но безуспешно.

Следуя примерам, которые я нашел, мой код должен работать, но это не так.

Я пытался найти больше объяснений, но не помогло.

К сожалению, я до сих пор не могу понять, почему мой код не работает.

Заранее спасибо.

-1

Решение

Не берите в голову.

Я нашел решение сам, методом проб и ошибок.

Изменяя это:

$phone_util = PhoneNumberUtil::getInstance();

в register.php к этому:

$phone_util = libphonenumber\PhoneNumberUtil::getInstance();

это работало нормально.

Однако я не могу логически объяснить, зачем нужен этот дополнительный код.

Для меня это выглядит как ошибка в PHP.

На мой взгляд, об этом нужно позаботиться в autoloader.php.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]