gamena007 каза:
@dakata__92, извинявай ако съм те засегнал. Коментарът ми нямаше такава цел.
Относно това:
private function getType($type = 'dog') {
return $this->type = $type;
}
Грешки:
1. Private getter method
2. Getter метод променя property
3. Getter метод връща резултат пуснатият към него параметър
В общи линии това са три реда код с три грешки в тях.
По точка едно в бързината на коментара съм го драснал, грешката е моя.
По другите инстанциии пак казвам зависи много ама много от приложението.
Който е изучавал методи за оптимизация ще се досети. Така нагледно да обясня.
PHP:
class Sounds{
private $sound;
public function getSound($sound = 'woof'){
return $this->sound = $sound;
}
}
$i = new Sounds();
echo 'The dog says '.$i->getSound().'.';
echo '<br>The cat says '.$i->getSound('meow').'.';
echo '<br>The dog says '.$i->getSound().'.';
Ето един клас. Както виждаш аз взимам дефаутовата стойност на параметъра на getSound която е woof. В един от случаите ми е нужно да взема просто някаква стойност за котката. Подавам на параметъра гет тази стойност и той ми я връща. Къде видяхте сетване на $this->sound извън getSound? Той винаги ще е false ако не съм викал гет. Давам друг пример, който води до същият резултат по вашата схема.
PHP:
class Sounds{
private $sound;
public function setSounds($sound){
$this->sound = $sound;
}
public function getSound(){
return $this->sound;
}
}
$i = new Sounds();
$i->setSounds('woof');
echo 'The dog says '.$i->getSound().'.';
$i->setSounds('meow');
echo '<br>The cat says '.$i->getSound().'.';
$i->setSounds('woof');
echo '<br>The dog says '.$i->getSound().'.';
Това сетване е излишно писане ако знам, че ще връщам някакаква дефаутова стойност на параметъра. Кое му е оптимизираното? Хващате се за някакво название на метода но ако го кръстя returnSound() ще кажете да може да стане така. Варянти и разновидности има много, но не казвай, че това е грешна практика, само защото съм кръстил някакъв метод get. Ти реално взимаш стойността на паръметъра на getSound и имаш възможността да подадеш друга стойност на параметъра и според логика да върнеш друго. Има много вариациии на кодовете примерно сещам се веднага за поне 5,6 варянта за достигане до същите резултати:
PHP:
class Sounds{
private $sound = 'woof';
public function setSounds($sound){
if(!empty($sound)){
$this->sound = $sound;
}
}
public function getSound(){
return $this->sound;
}
}
$i = new Sounds();
echo 'The dog says '.$i->getSound().'.';
$i->setSounds('meow');
echo '<br>The cat says '.$i->getSound().'.';
$i->setSounds('woof');
echo '<br>The dog says '.$i->getSound().'.';
За мен това е едно така оптимизирано решение, бързо което дадох, което за стотен път ще кажа, че връща ДЕФАУТОВА стойност. Защо се хващате за примера ми, когато човекът към който съм го драснал схвана идеята ми. Писал съм го тук по между работата ми и прочие.
class Sounds{
private $sound;
public function getSound($sound = 'woof'){
return $this->sound = $sound;
}
}
$i = new Sounds();
echo 'The dog says '.$i->getSound().'.';
echo '<br>The cat says '.$i->getSound('meow').'.';
echo '<br>The dog says '.$i->getSound().'.';
Бързо, лесно и без нуждата да създавам отделен сетер тоест метод да сетва променливата си свършвам същата работа. Един професор преди време ми каза, че когато следваш пътя на стериотипа не виждаш пътеката до върха. Оптимизацията е вид вариация на дадено действие просто подобрено. Сега, според вас ако не е подобрено това е вашо виждане, но за моите расъждения си е спестяване на код. Ако на някакво приложение трябва да сетна 10 променливи тоест нещо нещо подобно трябва да изписвам на всяка променлива метод а после и да го викам. Сега не успорвам, че това което казвате не е правилно. Напротив в много от случаите го използвам и така нататък, но това зависи от логиката, от самото приложение и от още десетки фактори. В случаят от последно даденият от мен код (public function getSound($sound = 'woof'){) когато викам private $sound; в класът да ми върне стойността той винаги е woof за метода, но ако реша да създам трети метод в който да използвам променливата тя ще бъде FALSE защото няма да е сетната и тогава вече може да се използва некакъв сетер да и подава стойност, като със съвсем малко логика в гет можете да направите пак супер гъвкав код. Но както и да е ще дам и едно друго примерче в подкрепа на вашата теза:
PHP:
class Sounds{
private $sound;
private $animal;
public function setSound($sound){
$this->sound = $sound;
}
public function getSound(){
return $this->sound;
}
public function animal(){
switch($this->sound){
case 'woof':
return $this->animal = 'dog';
break;
case 'meow':
return $this->animal = 'cat';
break;
}
}
}
$i = new Sounds();
$i->setSound('woof');
echo 'The '.$i->animal().' says '.$i->getSound().'.';
$i->setSound('meow');
echo '<br>The '.$i->animal().' says '.$i->getSound().'.';
$i->setSound('woof');
echo '<br>The '.$i->animal().' says '.$i->getSound().'.';
Така сега ще постна и недостатък на моята логика е така просто заради примера, за да покажа, че и тя не е универсално решение. Все пак ще отбележа, че metoda анимал се вика преди гет което пък нали указва влияние в логиката.
PHP:
class Sounds{
private $sound;
private $animal;
public function getSound($sound = 'woof'){
return $this->sound = $sound;
}
public function animal(){
switch($this->sound){
case 'woof':
return $this->animal = 'dog';
break;
case 'meow':
return $this->animal = 'cat';
break;
}
}
}
$i = new Sounds();
echo 'The '.$i->animal().' says '.$i->getSound().'.';
echo '<br>The '.$i->animal().' says '.$i->getSound('meow').'.';
echo '<br>The '.$i->animal().' says '.$i->getSound().'.';
Но следвайки логиката веднага идва вариацията на примера:
PHP:
class Sounds{
private $sound;
private $animal;
public function getSound($sound = 'woof'){
return $this->sound = $sound;
}
public function animal(){
switch($this->sound){
case 'woof':
return $this->animal = 'dog';
break;
case 'meow':
return $this->animal = 'cat';
break;
}
}
}
$i = new Sounds();
echo ucfirst($i->getSound()).' is said by the '.$i->animal();
echo '<br>'.ucfirst($i->getSound('meow')).' is said by the '.$i->animal();
echo '<br>'.ucfirst($i->getSound()).' is said by the '.$i->animal();
Заключението е, че всички сме прави, зависейки от логиката и ситуацията в приложенията, които създаваме! :?: :?: :?: