@Viktor091

Почему при подключении трейта в два класса, один из этих классов программа перестает видеть?

Всем доброго времени суток!
Столкнулся с необходимостью применения трейтов PHP, и тут проблема. При подключении одного трейта в два не связанных между собой класса, один класс работает норм а на второй PHP ругается (Uncaught Error: Class 'MY_CLASS_1' not found).
TRAIT:
trait kmu_trait {
	public $index;
	public $kmu;
	public function __construct(int $num) {
		$this -> index = $num;
		$this -> kmu = $this -> search_kmu();
	}
	private function search_kmu() {
		global $mysqli;
		global $tasks;
		if ($tasks[$this -> index]['index'] == 'repost_arrived_container_vk') {
			return false;
		}else {
			$sql = $mysqli -> query("SELECT * FROM price WHERE namber_p_p=".$tasks[$this -> index]['id_kmu']);
			if ($sql == true) {
				$kmu = mysqli_fetch_assoc($sql);
			}else {
				$kmu = NULL;
				$errore = file_put_contents(ERRORE, 'Ошибка подключения к базе данных! '.date('H:i:s d.m.Yг.')."\n", FILE_APPEND);
				$tasks[$this -> index]['status'] = 'Ошибка';
				if (!empty($tasks[$this -> index]['count_error'])) {
					$count_error = $tasks[$this -> index]['count_error'];
				}else {
					$count_error = 0;
				}
				$tasks[$this -> index]['count_error'] = ++$count_error;
				$tasks[$this -> index]['time_done'] = time();
				$result = file_put_contents(TASKS, json_encode($tasks));
			}
			return $kmu;
		}
	}
}

Первый класс:
class MY_CLASS_1 {
	use kmu_trait;
//Далее методы
}

И второй:
class MY_CLASS_2 extends MY_CLASS{
	use kmu_trait;
//Далее методы
}

PHP ругается на первый класс!
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
Столкнулся с необходимостью применения трейтов PHP, и тут проблема.

Трейты действительно нужны в очень специфических кейсах, 146% что это не ваш кейс.
У вас код и так даже не комочками, не стоит его разводить до более жидкого состояния.

Конструктор в трейте - это, не нахожу подходящего цензурного слова, пусть будет табу.

Что касается непосредственно вашей ошибки - смотрите в сторону автолодинга.

https://github.com/index0h/php-conventions почитайте на досуге
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@TheElePHPant
А где объявлен класс MY_CLASS?

class MY_CLASS_2 extends MY_CLASS_1{

должно быть так

Ну и да, про кодстайл уже сказали.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы