Как называется подход в ООП?

  • Автор темы Светлана PHP
  • Дата начала

fixxxer

К.О.
Партнер клуба
Кстати, никаких свитчей. Вот тебе реализация а-ля Delphi:
PHP:
<?

class Foo {

  private $_var;

  protected function var_get() { return $this->_var; }
  protected function var_set($value) { $this->_var = $value; }

  function __get($var) {
    if (method_exists($this, $method = $var.'_get')) return $this->$method();
  }

  function __set($var, $value) {
    if (method_exists($this, $method = $var.'_set')) $this->$method($value);
  }

}

$bar = new Foo();

$bar->var = 10;
echo $bar->var;

?>
 

_RVK_

Новичок
всем кто все ще спорит со мной, могу предложить:
1. не пользоваться $_GET/$_POST
2. испоьзовать global везде где это возможно
3. юзать собаку и забыть про ненужные прверки.
4. установить display_errors on
5. установить error_reporting в 0
6. забыть про использование шаблонизаторов
7. не использовать ООП, оно тормозит.

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

_RVK_

Новичок
fixxxer
неплохо :) да вот тебе придется удалить все свой... сори переменные класса, ведь __*et вызываются только для несуществующих переменных. Или нет?

-~{}~ 28.03.05 19:58:

опять же это больше напоминает заплатку.
 

fixxxer

К.О.
Партнер клуба
Смотри.
Номер раз:
PHP:
<?

class Foo {
  public $var;

  public function DoSomething()
  {
    echo intval($this->var) * 5;
  }
}

$bar = new Foo();

$bar->var = 10;
echo $bar->var;
$bar->DoSomething();

?>
Номер два:
PHP:
<?

class Foo {

  private $_var;

  protected function var_get() { return $this->_var; }
  protected function var_set($value) { $this->_var = $value; }

  public function DoSomething()
  {
    echo intval($this->var) * 5;
  }

  function __get($var) {
    if (method_exists($this, $method = $var.'_get')) return $this->$method();
  }

  function __set($var, $value) {
    if (method_exists($this, $method = $var.'_set')) $this->$method($value);
  }

}

$bar = new Foo();

$bar->var = 10;
echo $bar->var;
$bar->DoSomething();

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

lovchy

nacido para cifrar
_RVK_
> Именно потому и не понял.
Да нет.. Я как-раз всё правильно понял. Очередной сапожник без сапог. Идейный борец без обоснования идей.

Не надо злоупотреблять словом отмазка. Единственная отмазка на 4 страницы этого треда -- это твоё "я привык так называть". На самом деле, несколько постов назад я убедился, что ты просто не знаешь теории.

По поводу неиспользования перечисленных подходов: есть конкретные минусы от их использования. А что можешь сказать ты? Ты ещё не назвал ни одной причины не использовать public-аттрибуты. Жутко перекрестил всё это с BC и свойствами (хотя у всего этого очень спорная общая нить). За неимением аргументов пошёл гон. Чистый гон в форме неумелых плосих шуток про общие ошибки новичков, который я считаю для себя оскорбительным и воспринимаю как переход на фамильярности. Так вот. Когда тебе будет что сказать, я с удовольствием тебя выслушаю. А пока строй, пожалуйста, предложения в следующей форме: 'я предпочитаю не использовать public-аттрибуты' дабы не вносить сумятицу и не провоцировать падких на споры людей (вроде меня). И ещё раз -- не хами. Если ты действительно что-то пытаешься сказать и тебя не понимают, ищи проблему в своей риторике. Всё, что слышим мы: я так делаю, так круто, а ещё у меня вот тут BC вот так сделано.
 

_RVK_

Новичок
fixxxer
твой довод самый разумный за сегодня. готов это признать. Потому предлагаю поставить точку в этом споре и сойтись на ничьей. :)
 

lovchy

nacido para cifrar
_RVK_
Его довод за сегодня не самый разумный, а просто единственный. О какой ничье может идти речь? Твой первый ужасный, даже без контраргумента не совсем состоятельный, довод разбит в пух и прах.

Ты неисправим.. 3 страницы бисера.
 

_RVK_

Новичок
Ты ещё не назвал ни одной причины не использовать public-методы
я не говорил про методы
что ты просто не знаешь теории
знаю достаточно
И ещё раз -- не хами
приношу свои извенеия. никого не хотел обидеть
я так делаю, так круто...
кажется я привел не один пример как в коде так и без. и пока единственный кто достойно ответил, это fixxxer. Отсюда могу сделать заключение, что никто просто не догадался до решения предложенного им. Соответственно, это только укрепляет мою уверенность в своей правоте. Я предпочитаю делать так как меня учили более опытные люди, и не отступать от этого, пока не увижу что есть на это веские причины. Я таких причин НЕ ВИЖУ.
 

lovchy

nacido para cifrar
> я не говорил про методы
Ага. Я опечатался. Я имел в виду аттрибуты. Без паблик-методов программирования бы не было :].

>кажется я привел не один пример как в коде так и без
Один. Несостоятельный. Разбитый fixxxer'ом. Ещё?

> Я предпочитаю делать так как меня учили более опытные люди, и не отступать от этого, пока не увижу что есть на это веские причины
Пожалуйста -- делай. Но не советуй другим того, чего сам понять не можешь. Данный подход может быть подходящим или неподходящим в зависимости от общего дизайна и подхода, которого человек придерживается. В целом -- я ни разу не сказал, что я против твоего постулата. Я против его необдуманного употребления без контекста. Надеюсь, мы друг друга поняли.
 

_RVK_

Новичок
Я против его необдуманного употребления без контекста
а я как раз наоборот. гораздо безопаснее изначально делать именно так. потому что на 4х страницах этого спора, только Фиксер на 4й предложил способ как обойти случай, когда не предусмотрены заранее get/set методы. Это довольно неплохая, но все же заплатка.
И о чем спор. Нужели всего 2 скобки встретили такой отпор?
PHP:
$obj->count(10);
print $obj->count();
PHP:
$obj->count = 10;
print $obj->count;
Этот вопрос сродни использовать @ или нет. Я иногда использую, но никогда не посоветую это делать никому. Проще сказать "никогда не используй", нежели придумывать случаи когда её использовать все же можно.

Ладно, спор предлагаю прикратить. А что бы никто не считал меня упертым бараном, признаю что моя катег0ричность все же была слишком катег0ричной.
 

Tonn

Новичок
Автор оригинала: lovchy
В целом -- я ни разу не сказал, что я против твоего постулата. Я против его необдуманного употребления без контекста.
Респект.
+1 :)
 

_RVK_

Новичок
_RVK_
Кстати, fixxxer. Как твой код будет документироваться например phpDocumentator'ом?
 

fixxxer

К.О.
Партнер клуба
А хрен его знает. :) Я еще не смотрел, как он работает с php5.
 

_RVK_

Новичок
fixxxer
Только разбираюсь с документатором, но кажется результат будет некоректным. Хотя и с __call не супер :)

-~{}~ 29.03.05 12:18:

я о том что переменные класса не будут документированы, потому что их там нет. Ты же их сам переименовал :)
 

fixxxer

К.О.
Партнер клуба
:)

Еще для размышления:

>php -v
PHP 5.1.0-dev (cli) (built: Mar 29 2005 12:31:54)

PHP:
<?

class Foo {

  private $var;

  protected function var_get() { return $this->var; }
  protected function var_set($value) { $this->var = intval($value); }

  public function DoSomething()
  {
    echo intval($this->var) * 5;
  }

  function __get($var) {
    if (method_exists($this, $method = $var.'_get')) return $this->$method();
  }

  function __set($var, $value) {
    if (method_exists($this, $method = $var.'_set')) $this->$method($value);
  }

}

$bar = new Foo();

$bar->var = "10.1";
echo $bar->var;
$bar->DoSomething();

?>
Код:
>php -f test1.php
1050
 

_RVK_

Новичок
проверить не могу, но это уже действительно круто. если все так и останется, весь этот спор действительно не о чем :)
 

Screjet

Новичок
Код:
PHP Fatal error:  Cannot access private property Foo::$var in /usr/home/valic/test.php on line 27

Fatal error: Cannot access private property Foo::$var in /usr/home/valic/test.php on line 27
PHP 5.0.3 (cli) (built: Mar 17 2005 16:02:35)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v2.0.3, Copyright (c) 1998-2004 Zend Technologies
with eAccelerator v0.9.2, Copyright (c) 2004-2004 eAccelerator, by eAccelerator
 

_RVK_

Новичок
PHP 5.0.3 != 5.1.0-dev :)
у меня тоже не работает :)

-~{}~ 29.03.05 16:24:

кстати, сори за глупый вопрос не в тему, но как получить доступ к cvs? Эта версия (5.1.0-dev) же оттуда?
 
Сверху