Я пишу программу, которая обрабатывает географические координаты города, и я хочу случайным образом выбирать свой город в каждом прогоне;процесс для всех городов одинаков.
У меня есть класс PHP для каждого города, который содержит его географические координаты;например:
<?php
namespace Utility\Locations;
class Tehran
{
const MIN_LAT = 35.325;
const MAX_LAT = 35.390;
const MIN_LNG = 51.165;
const MAX_LNG = 51.230;
}
В другом PHP-файле я использую класс как:
use Utility\Locations\Tehran;
use Utility\Locations\Karaj;
...
protected function MyProcessingMethod () {
...
$city = Faker::create()->randomElement(array("Tehran", "Karaj"));
echo $city::MIN_LAT;
...
}
...
Если это поможет, вышеупомянутый файл представляет собой CodeCeption Cest
и MyProcessingMethod
используется как DataProvider
.Когда я запускаю свои тесты, используя codecept run scenarios/MyCest.php
, я получаю эту ошибку:
PHP Fatal error: Uncaught Error: Class 'Tehran' not found in /home/zeinab/PhpstormProjects/test/scenarios/MyCest.php:190
Stack trace:
#0 [internal function]: MyCest->MyProcessingMethod()
#1 /home/zeinab/PhpstormProjects/test/vendor/codeception/codeception/src/Codeception/Util/ReflectionHelper.php(47): ReflectionMethod->invokeArgs(Object(MyCest), Array)
#2 /home/zeinab/PhpstormProjects/test/vendor/codeception/codeception/src/Codeception/Test/Loader/Cest.php(65): Codeception\Util\ReflectionHelper::invokePrivateMethod(Object(MyCest), Object(ReflectionMethod))
#3 /home/zeinab/PhpstormProjects/test/vendor/codeception/codeception/src/Codeception/Test/Loader.php(109): Codeception\Test\Loader\Cest->loadTests('/home/zeinab/Ph...')
#4 /home/zeinab/PhpstormPro in /home/zeinab/PhpstormProjects/test/scenarios/MyCest.php on line 190
Я прочитал официальную документацию PHP по этому типу использования , но все примеры с использованиемклассы, которые определены в файле назначения.
Я также попробовал это:
$city = Faker::create()->randomElement(array(Tehran::class, Karaj::class));
echo $city::MIN_LAT;
Но я получил ту же ошибку.
Есть ли в любом случае делать то, что я хочу?
РЕДАКТИРОВАТЬ 1: Я указал путь к классам в теге psr-4
моего composer.json
:
"autoload": {
"psr-4": {
"Utility\\": "Utility/"
}
}
Кажется, что нет никаких проблемв загрузке классов, так как их использование напрямую работает нормально.Например, следующий код работает отлично:
echo Tehran::MIN_LAT;