atis2345
@atis2345
PHP developer

Почему в автозагрузчик 2 раза бросается вызов класса?

namespace base\libs;

class User
{
	use patterns\Singleton;

	public function getData()
	{

	}
}

namespace base\patterns;

trait Singleton
{
	static private $instance;

	private function __construct() {}
	private function __clone() {}
	private function __wakeup() {}

	static public function getInstance()
	{
		if (empty(static::$instance)) {
			static::$instance = new static();
		}

		return static::$instance;
	}
}

namespace base;

$User = libs\User::getInstance();
$User->getData();


при выполнении этого кода autholoader вызывается 3 раза!
1. base\libs\User
2. base\patterns\Singleton
3. Singleton !!!

Никак не могу понять когда вызывается 3 запрос?

P.S. Даже если я меняю use patterns\Singleton; на use \base\patterns\Singleton; у меня все равно 3 вызова.
  • Вопрос задан
  • 184 просмотра
Решения вопроса 2
prototype_denis
@prototype_denis
Symfony
// dir /base/libs/';
namespace base\libs;

// file /base/libs/User.php';
class User
{
    // file /base/libs/patterns/Singleton.php';
    use patterns\Singleton;
    //.. 
}

// dir /base/patterns/';
namespace base\patterns;

// file /base/patterns/Singleton.php';
trait Singleton
{
    //.. 
}


// dir /base/';
// file /base/AnyFile.php';
namespace base;

$User = libs\User::getInstance();
// include /base/libs/User.php;
//                      ^
//                      | 200 Ok
//                      +--------
// call User::getInstance
// include /base/libs/patterns/Singleton.php;
//               ---
//                ^
//                | (Вторая строка "2. base\patterns\Singleton")
//                | 404 Not Found. 
//                | 
//                | Далее попытка загрузить из глобального namespase
//                | include \Singleton
//                | (третья строка "3. Singleton !!!")
//                +-------------------------------------------------
//                
// 
// $User->getData();
// 500 Internal Server Error


/base/patterns/Singleton.php реальный путь.
/base/libs/patterns/Singleton.php подключаемый.

Не игнорируйте пожалуйста ответ Mikhail Osher
Ответ написан
atis2345
@atis2345 Автор вопроса
PHP developer
Решение тут.
Читать внимательно!!
www.php-fig.org/psr/psr-4/ru
https://github.com/php-fig/fig-standards/blob/mast...
И да простят все джуниора)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
miraage
@miraage
Старый прогер
У вас всё это в одном файле? Уууу, я вас умоляю....

https://getcomposer.org/doc/04-schema.md#autoload

И вообще, внимательно ознакомтесь со всеми PSR стандартами.
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Не знаю, имеет ли это отношение к проблеме, но должно быть так:
use base\patterns\Singleton;
Ответ написан
Я думаю, что по этому:
use patterns\Singleton;

namespace base\patterns;

Попробуйте вместо use patterns\Singleton;
Написать use base\patterns\singleton;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 140 000 до 170 000 ₽
Stream Telecom Санкт-Петербург
от 120 000 ₽
от 120 000 до 250 000 ₽
05 июн. 2023, в 17:02
10000 руб./за проект
05 июн. 2023, в 17:00
3000 руб./за проект
05 июн. 2023, в 16:53
5000 руб./за проект