Помогите разобраться с методом класса в ООП (php)

12
Tenarius
На сайте с 09.02.2012
Offline
14
775

Есть следующий код:


<?php
class Car {
private $_color;
function set_Color ($c) {
if (!is_string($c) || strlen($c) == 0) {
return 0;
} else {
$this->_color = $c;
}//if-else
}//set_Color
function get_Color () {
return $this->color;
}//get_Color
function isColor () {
if ($this->set_Color($c) == 0) {
echo 'Неверное значение цвета';
} else {
echo 'Цвет автомобиля: '.$this->_color;
}//if-else
}//isColor
}//class Car
$bmw = new Car();
$bmw->set_Color('белый');
$bmw->isColor();
?>

Собственно браузер на все это дело выдает "Неверное значение цвета", хотя задача сделать так, чтобы в данном случае он вывел "'Цвет автомобиля: белый".

Полагаю у меня ошибка в этой строке:


if ($this->set_Color($c) == 0)

Но если такое написание использовать нельзя, то чем его заменить?

Заранее спасибо.

Мне нужны деньги...
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#1

$bmw = new Car();

Подпись))
Tenarius
На сайте с 09.02.2012
Offline
14
#2

Милованов Ю.С, точно, спасибо. Но это все равно не решило проблему )

TF-Studio
На сайте с 17.08.2010
Offline
334
#3

Перепишите в 1 простую функцию.

К чему тут огород городить?

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
Tenarius
На сайте с 09.02.2012
Offline
14
#4

TF-Studio, это обучающее задание, поэтому нужен именно такой огород

LovelAss
На сайте с 05.06.2009
Offline
96
#5

Tenarius, если следовать логике, то должно быть так:


<?php
class Car {
private $_color;
function set_Color ($c) {
if (!is_string($c) || strlen($c) == 0) {
$this->_color = 0;
} else {
$this->_color = $c;
}//if-else
}//set_Color
function get_Color () {
return $this->color;
}//get_Color
function isColor () {
if ($this->_color == 0) {
echo 'Неверное значение цвета';
} else {
echo 'Цвет автомобиля: '.$this->_color;
}//if-else
}//isColor
}//class Car
$bmw = new Car();
$bmw->set_Color('белый');
$bmw->isColor();
?>
Tenarius
На сайте с 09.02.2012
Offline
14
#6

LovelAss, так тоже пробовал, не работает

---

Вобщем еще раз попробовал способ, аналогичный тому, что предложил LovelAss, только 0 сделал строкой. Сработало. Не понимаю как оно так получается? Ведь при вызове метода isColor пхп повторно не обращается к set_Color, а просто проверяет значение $_color. Или я не прав?

LovelAss
На сайте с 05.06.2009
Offline
96
#7

$this->_color == 0 замените на $this->_color === 0, либо вместо нуля используйте false. А то у Вас там сравнение разных типов данных получается.

P
На сайте с 24.12.2010
Offline
46
#8

Tenarius, можно так

if ($this->_color === 0) {
Tenarius
На сайте с 09.02.2012
Offline
14
#9

Postfix, ради интереса проверил, так тоже не сработало... Почему то работает, только если 0 - это строка, но вот почему - не понятно...

---------- Добавлено 04.03.2013 в 11:57 ----------

LovelAss, при использовании == типы данных не особо важны, лижь бы значение было одно. false тоже пробовал, не работает.

Всем спасибо за помощь, причина оказалась в слабом развитии моего мозга. Неправильно имя переменной написал в методе isColor

LovelAss
На сайте с 05.06.2009
Offline
96
#10
Tenarius:
LovelAss, при использовании == типы данных не особо важны, лижь бы значение было одно.

Оно и будет одно. У Вас идёт сравнение строки с числом и строка автоматом превращается в численный тип, который, в данном примере, равен нулю. А как мы видим 0 == 0. Но если будем использовать оператор логического сравнения ===, то получим неравенство типов.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий