интерфейсы

eltoko

Новичок
интерфейсы

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

перехожу на PHP5, прочитал кучу подобных статей http://phpclub.ru/detail/article/intro_php5

и пока не врубаюсь зачем нужны:
- интерфейсы (до PHP5 для меня понятие "интерфейс" имело другой смысл: интерфейс пользователя - т.е. внешность программы),
- абстрактные классы,
- статические методы (без них трудно жить? или с ними намного проще?),
- деструктор (на практике не вижу в нем никакого толка),
- клонирование: разве нельзя объявлять два объекта одного класса?
PHP:
$a=new Foo;
$b=new Foo;
В теории вроде понятно, что такое и с чем их кушать, т.е. понятны конструкции, как писать то, как это;
а вот в практической реализации я пока не совсем понял, т.е. зачем оно надо? :)
например:
"вот здесь лучше использовать абстрактный класс, чтобы... "
"а здесь лучше клонировать объект, это даст (не даст)... "
"а если здесь ты опишешь интерфейс, то тебе будет проще сделать ... "

спросить, чтоб наглядно объяснили, не у кого (всегда кодил один, не в команде)...
 

zerkms

TDD infected
Команда форума
на все твои вопросы невозможно ответить в рамках форума - читай книжки.
 

HraKK

Мудак
Команда форума
- интерфейсы (до PHP5 для меня понятие "интерфейс" имело другой смысл: интерфейс пользователя - т.е. внешность программы),
- абстрактные классы,
- статические методы (без них трудно жить? или с ними намного проще?),
- деструктор (на практике не вижу в нем никакого толка),
- клонирование: разве нельзя объявлять два объекта одного класса?
с ООП я знаком. понимаю зачем нужны классы, зачем нужны функции в них и тому подобное понимаю и использую на практике.
С ООП ты не знаком, ты знаком с функциональным программированием, если ты думаешь что ввел классы в функции как наймспейсы то чудом твой код стал ООПшным - не льсти себе. У тебя самый обычный функциональный код. А чтоб постигнуть ООП надо не один год читать книги и практиковаться, так что форум с такими вопросами тебе не поможет, тут прав zerkms
 

eltoko

Новичок
Автор оригинала: HraKK
С ООП ты не знаком, ты знаком с функциональным программированием, если ты думаешь что ввел классы в функции как наймспейсы то чудом твой код стал ООПшным - не льсти себе. У тебя самый обычный функциональный код. А чтоб постигнуть ООП надо не один год читать книги и практиковаться, так что форум с такими вопросами тебе не поможет, тут прав zerkms
Вот например код, который написан мною: это весь index.php
PHP:
<?php
    @session_start();
    session_set_cookie_params (0, '/');
   
	/**
	 * Абсолютный путь к корню сайта.
	 */
	$_root = $_SERVER['DOCUMENT_ROOT'];

	/**
	 * Если мы не в корне, добавлять слэши к концу строки.
	 */
    if ($_root[strlen($_root) - 1] != '/')
		$_root .= '/';

	/**
	 * Определяем константы.
	 * ROOT_DIR - корневая папка.
	 */
	define('ROOT_DIR', $_root);

/*   кусок вырезал, для уменьшения размеров на форуме */

	/**
	 * Автоподключение всех вызываемых классов.
	 */

	function __autoload($className){
		/**
		 * Ищем в папке system/kernel/
		 */
		if(file_exists(ROOT_DIR . "system/kernel/" . "$className" . '.php')){
			require_once(ROOT_DIR . "system/kernel/" . "$className" . '.php');
		}/*   кусок вырезал, для уменьшения размеров на форуме */
		else
			die("No file " . ROOT_DIR . "$className" . '.php');
	}
	
	$LOADED_JS = array();
	/**
	 * Создаем экземпляр основного класса системы.
	 * В качестве аргумента передаем ему массив серверных переменных.
	 */
	$engine = new Engine($_SERVER);
	
	$pluginPost = null;
	/**
	 * Запускаем систему и выводим её на экран.
	 */
    header("Content-Type: text/html;charset=UTF-8");
    try{
        echo $engine->execute();
    }
    catch(ELIBException $e){
        print($e->message());
    }
?>
Разве это не ООП? :)
 

HraKK

Мудак
Команда форума
eltoko
нет.

zerkms
зато как свято верит что это ООП :)
 

Духовность™

Продвинутый новичок
- интерфейсы (до PHP5 для меня понятие "интерфейс" имело другой смысл: интерфейс пользователя - т.е. внешность программы),
- абстрактные классы
Hrakk хорошо ответил в соседней теме: http://phpclub.ru/talk/showthread.php?postid=895731#post895731

- деструктор (на практике не вижу в нем никакого толка),
Ты написал, допустим, класс для работы с текстовым файлом. Ты можешь явно написать в конце программы $myclass->close() и закрыть файл с помощью функции fclose() определенной в методе close(), а можешь fclose вынести в деструктор и как только класс "умрет" деструктор сработает и закроет твой файл автоматически, что будет гарантировать целостность данных.

клонирование: разве нельзя объявлять два объекта одного класса?
клонирование - это не то же самое, что и "два объекта одного класса". Мы можем создать два объекта одного класса, но если мы изменим один объект - например, добавим в него новое свойство, то получить копию этого объекта как раз нужно через клонирование.

В теории вроде понятно, что такое и с чем их кушать, т.е. понятны конструкции, как писать то, как это;
а вот в практической реализации я пока не совсем понял, т.е. зачем оно надо?
например:
"вот здесь лучше использовать абстрактный класс, чтобы... "
"а здесь лучше клонировать объект, это даст (не даст)... "
"а если здесь ты опишешь интерфейс, то тебе будет проще сделать ... "
все перечисленное тобой имеет смысл в больших ОО-приложениях. Сейчас на тему интерфейсов, абстрактных классов и клонирования даже не заморачивайся. Это тебе не нужно будет как минимум, годик.
 

Beavis

Banned
zerkms
чтобы если сессия уже стартовала ранее, не было ворнинга
 

Fortop

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

Beavis

Banned
Автор оригинала: Fortop
В данном конкретном случае это файл - точка входа в приложение. Причем судя по всему единственная.
Где сессия должна стартовать раньше?
ну мало ли, по-моему в php.ini можно настроить чтоб сессия автоматически запускалась)
а так, когда пишешь какой нибудь модуль и не знаешь, была ли сессия уже запущена раньше, это вполне нормально поставить собаку перед session_start, т.к. правильного способа проверить, была ли запущена сессия, насколько я знаю, нет
 

fixxxer

К.О.
Партнер клуба
>>с ООП я знаком

увы, нет.

читай книжки не по похапе.
 

Sherman

Mephi
Самым емким, и в то же время простым, объяснением, которое встречал я, было то, которое есть в книге GoF.
 

HraKK

Мудак
Команда форума
Beavis
чтобы если сессия уже стартовала ранее, не было ворнинга
а проверить не стартовала ли она изначально не тру уже?
Так же как, была ли определена переменная и т.д. да?
 

Fortop

Новичок
это вполне нормально поставить собаку перед session_start, т.к. правильного способа проверить, была ли запущена сессия, насколько я знаю, нет
Ну почему же?

Например.
PHP:
var_dump(session_id());
и
PHP:
session_start();
var_dump(session_id());
 

boombick

boombick.org
С ООП ты не знаком, ты знаком с функциональным программированием
Эээээ.. Функциональное программирование - это несколько другое :) И с ним ТС точно не знаком :)
 

Beavis

Banned
Автор оригинала: HraKK
Beavis

а проверить не стартовала ли она изначально не тру уже?
Так же как, была ли определена переменная и т.д. да?
Автор оригинала: Fortop
Ну почему же?

Например.
PHP:
var_dump(session_id());
и
PHP:
session_start();
var_dump(session_id());
http://phpclub.ru/talk/showthread.php?s=&threadid=55083
 
Сверху