felony13twelve
@felony13twelve

Как упростить код?

Есть вот такой код
public function setProvider ($onEnable = true) { 
 $providerName = $this->getProviderName(); 
 
 switch ($providerName) { 
 case 'DefaultProvider': 
 $provider = new DefaultProvider($this); 
 if ($onEnable) { 
 echo "Тип хранилище данных DefaultProvider"; 
 } 
 break; 
 
 case 'Test': 
 $provider = new TestProvider($this); 
 if ($onEnable) { 
 echo "Тип хранилище данных TestProvider"; 
 } 
 break; 
 
 default: 
 if ($onEnable) { 
 echo 'нету'; 
 } 
 break; 
 } 
 }


Как мне правильно сделать вывод сообщения, типо что такой провайдер установлен, чтобы не писать каждое сообщение в case?

Можно ли проверить, что вернул switch true или false.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 2
DevMan
@DevMan Куратор тега PHP
правильно – вообще не делать никакого вывода: должна быть только одна точка вывода.
Ответ написан
miraage
@miraage
dev 10+ years experience
100 лет не писал на PHP, не уверен, что правильный синтаксис, но идея такая.
И, как сказали, echo не надо пихать везде. Есть золотая цитата: "PHP разработчиков бить по рукам ровно столько раз, сколько встречается вывод буффера, минус 1".
<?php

class MyClass {
	static $providers = [
		'DefaultProvider' => DefaultProvider::class,
		'Test' => TestProvider::class,
	];
	
	public function setProvider($onEnable = true) {
		$name = $this->getProviderName();
		$class = self::$providers[$name];
		
		if ($class) {
			echo "Provide type ${name}";
			$provider = new $class($this);
			// do magic
		} else {
			echo "No provider";
		}
	}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
kur4chyt
@kur4chyt
Качественный говнокод от производителя
if ( !empty($providerName) ){
echo "Тип хранилище данных".$providerName;
}else{
echo "нету";
}
Ответ написан
anton_reut
@anton_reut
Начинающий веб-разработчик
Для начала убрать кучу IF:
public function setProvider ($onEnable = true) { 
 $providerName = $this->getProviderName(); 

 if ($onEnable) { 
 switch ($providerName) { 
 case 'DefaultProvider': 
 $provider = new DefaultProvider($this); 
 echo "Тип хранилище данных DefaultProvider"; 
 break; 
 
 case 'Test': 
 $provider = new TestProvider($this); 
 echo "Тип хранилище данных TestProvider"; 
 break; 
 
 default: 
 echo 'нету'; 
 break; 
} 
}
}

А
чтобы не писать каждое сообщение в case

сделай у каждого объекта поле $message и потом выводи его в echo $provider->message;
Ответ написан
@necrodeflorator
if ($onEnable) {
    if (!in_array($providerName, ['DefaultProvider', 'Test']){
        echo 'нету'; 
    }
    echo 'Тип хранилище данных ' . $providerName';
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
АКМЭ сервис Санкт-Петербург
от 120 000 до 150 000 ₽
Директ Кредит Казань
от 70 000 до 120 000 ₽
Технология Тюмень
от 50 000 до 130 000 ₽
07 авг. 2020, в 19:51
2000 руб./за проект
07 авг. 2020, в 19:24
4000 руб./за проект