Jump to content
  • 0

Вопрос по ООП


gesandte
 Share

Question

Вобщем имеем к примеру класс:

final class base {
static public $var;
static public function alfa()
{
# здесь происходит первичная обработка
# пусть это будет переменная $value

self::$var = $value;
}
}

Так же имеем класс, который имеет функции, где происходит узконаправленная проверка(какие св-ва надо применть к классу не знаю). Например:

class sub {
function beta()
{
$value_flag = filter_var($value, FILTER_VALIDATE_INT);

if ($value_flag !== false)
{
echo "Значение не верно";
unset($value);
exit();
}
# если сделать класс статичным
# то снова пишем self::
# ?
}
}

В процессе работы скрипта выходит:

# применяем базовый класс
base::alfa();

# переменная этого класса будет доступна как
base::$var;

Далее надо как то передать перменную $var функции beta(), не думаю что такая запись будет првильна:

sub::beta(base::$var);

После чего продолжение программы.

Может надо изменить св-ва базового класса, а подкласс сделать наследуемым?

Вобщем надо защитиь переменную $var.

#########################################################################

П.С. Может кто знает какие ссылки где описано подробно с примерами применение ООП, а то у меня по сути в книге ООП посвещено всего 8 листов, и понять как его применять на практике трудно.

Спасибо за внимание.

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0
Вобщем надо защитиь переменную $var.

я думаю, что вам никто не мешает написать метод в классе base, который будет возвращать переменную $var.

При этом стоит закрыть переменную $var (сделать ее private или protected) и получать ее значение только через этот метод. Таким образом никто из внешних объектов не сможет изменять переменную $var.

Link to comment
Share on other sites

  • 0

http://www.books.ru/shop/books/367978

http://www.books.ru/shop/books/693675

Там об этом больше написано.

Вот еще классика http://www.books.ru/shop/books/352130

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

Либо использовать метод __get(). Но мне кажется, для этого придется создать экземпляр.

И еще тут ошибка.

В классе sub метод надо объявить как статический, либо создать экземпляр и работать через него. А так не то, не сё получается.

Когда объявляешь sub::beta(), так же надо указать параметр, как при работе с обычной функцией.

Или внутри метода значение дергать как:

static function beta() 
{
$value = base::$var;
//...
}

static function beta( $value ) 
{
//...
}

для начала вообще определитесь, для чего классы объявлять и какой паттерн хотите реализовать, а потом уже проектируйте.

Link to comment
Share on other sites

  • 0
П.С. Может кто знает какие ссылки где описано подробно с примерами применение ООП, а то у меня по сути в книге ООП посвещено всего 8 листов, и понять как его применять на практике трудно.

Спасибо за внимание.

http://www.ozon.ru/context/detail/id/4574420/

Хорошая книга. Скачать её не получится. Она новая. Посвещена в основном ооп. Есть и много другово полезного. Сам час её читаю.

Link to comment
Share on other sites

  • 0
xPoint: а там примеры на пыхе? искал в электорнном виде, видел эту книгу, может издание другое, примеры на С++

примеры там действительно на С++, но книга не о конкретном языке программирования, а об объектно-ориентированном анализе и проектировании. Как раз то, что нужно знать про ООП, а примеры, после прочтения книги (и конечно же усвоения того материала), можно с легкостью перевести на любой язык

Link to comment
Share on other sites

  • 0
лучше купить, так удобнее)

Согласен)))

примеры там действительно на С++, но книга не о конкретном языке программирования, а об объектно-ориентированном анализе и проектировании. Как раз то, что нужно знать про ООП, а примеры, после прочтения книги (и конечно же усвоения того материала), можно с легкостью перевести на любой язык

почитаю)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy