[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача с ООП
Mischanja
Вообщем есть такая задача(на неродном языке, но смысл предельно ясен). Нужно выполнить с использованием ООП. Я не могу понять как это сделать, сейчас читаю книги, но сделать нужно с сжатые сроки. Если есть возможность - помогите!

You have an abstract class Parser:

class Parser {

function validateData($data, $type) {}
}


You need to override validateData() so that when $type is set it would call a custom user validator. For example, if $type == “Numeric”, validateData() would call validateNumeric($data) within itself.





Спустя 1 час, 48 минут, 46 секунд (22.06.2010 - 17:22) gzim9x написал(а):
как то так...
class Parser {

function validateData($data, $type) {}
}


class Parser2 extends Parser {

function validateData($data, $type) {
if ($type == "Numeric")
$this->validateNumeric($data);
}

function validateNumeric($data) {
...
}
}

Спустя 1 час, 20 минут, 56 секунд (22.06.2010 - 18:43) Mischanja написал(а):
пасиб. А можно ли через case($type) сделать все в одной функции, чтобы постоянно не дублировать несколько. Вот так вот можно, идея не теряет смысл?


class Parser {

function validateData($data, $type) {}
}


class Parser2 extends Parser {

function validateData($data, $type) {
switch ($type) {
case "Numeric":
$this->validateNumeric($data);
break;
case "String":
$this->validateNumeric($data);
break;
case "Array":
$this->validateNumeric($data);
break;
}

}


Спустя 3 минуты, 13 секунд (22.06.2010 - 18:46) Mischanja написал(а):
мля, и соответственно повводить несколько функций validateNumeric,validateArray, validateString. Я там промахнулся.

Спустя 24 минуты, 48 секунд (22.06.2010 - 19:11) gzim9x написал(а):
пасиб. А можно ли через case($type) сделать все в одной функции, чтобы постоянно не дублировать несколько. Вот так вот можно, идея не теряет смысл?

можно. Напишите как вам удобнее и чтобы удобнее читалось другим.
Написать код, чтобы его поняла машина может каждый, -- а вот чтобы разобрался другой программист... smile.gif

Спустя 1 минута, 18 секунд (22.06.2010 - 19:12) Mischanja написал(а):
Спасибо.)

Спустя 41 минута, 37 секунд (22.06.2010 - 19:54) Ice написал(а):
странная какая-то задача, или составители ее: они пишут, что должен быть абстрактный класс Парсер, но в то же время приводят пример обычного класса.

Я думаю, что меня просят написать пример метода-перехватчика __get:

<?php
abstract class
Parser {
abstract function validateData( $data, $type );
}

class Parser2 extends Parser {
function validateData( $data, $type ) {
$method = "validate{$type}";
if( method_exists( $this, $method ) ) {
return $this->$method( $data );
}
}

function validateNumeric( $data ) {
print 'ValidateNumeric: '.$data.'<br />';
}
function validateString( $data ) {
print 'ValidateString: '.$data.'<br />';
}
}

// запускаем
$p = new Parser2;
$p->validateData( 123, 'Numeric' ); // ValidateNumeric: 123
$p->validateString( 'Hello, world!', 'String' ) // ValidateString: Hello, world!
?>

Я правильно понял?

Спустя 54 минуты, 36 секунд (22.06.2010 - 20:48) Mischanja написал(а):
Да, так будет очень правильно! Вы поняли правильно.

Спустя 2 минуты, 27 секунд (22.06.2010 - 20:51) Ice написал(а):
Рад был помочь!

Спустя 32 минуты, 52 секунды (22.06.2010 - 21:23) Mischanja написал(а):
только у меня вопрос, зачем вот так вот писать:
return $this->$method( $data ); Разве нельзя просто return $this->$data ?
Не уловил этого момента(

Спустя 7 минут, 41 секунда (22.06.2010 - 21:31) Ice написал(а):
В данном случае вылезет ошибка, потому что свойство $data не определено в классе. Да и мы же хотим вызвать не просто свойство а валидатор для него, верно?
У нас же под $this->$method( $data ) скрывается валидатор для нашего параметра. Он и вернет всё приготовленным после обработки.

Спустя 2 минуты, 51 секунда (22.06.2010 - 21:34) Mischanja написал(а):
ох, ссории, я кое что не увидел, ведь мы передаем переменную через method. Ок, я все понял основательно, спасибо еще раз огромное!!!

Спустя 1 минута, 8 секунд (22.06.2010 - 21:35) Ice написал(а):
незачто smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.