функции или ООП PHP?

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Гость
проходил мимо

функции или ООП PHP?

Непрочитанное сообщение Гость » 2010-06-27 22:26:38

вечер добрый
дали задание нарисовать веб-морду на пхп для корпоративных нужд. Одновременно получилось так, что на этом задании я одновременно учусь и php. Сейчас написанное мной представляет собой мешанину из sql запросов и php.
Если процесс обучения идет по нарастающей, то потом это я должен оформить все в виде функций, потом еще изучив, использовать классы (то есть уже ООП). Так это надо делать?
или можно просто ввести функции и остановиться на этом??

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: функции или ООП PHP?

Непрочитанное сообщение ProFTP » 2010-06-28 9:40:22

как хочешь...

для не изобретения велосипедов есть Yii PHP Framework или Zend Framework или другие

но не помешало бы взять большую систему (Framework) и посмотреть...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Гость
проходил мимо

Re: функции или ООП PHP?

Непрочитанное сообщение Гость » 2010-06-29 9:09:52

ну, а есть некоторая граница, когда надо использовать ООП?

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: функции или ООП PHP?

Непрочитанное сообщение Volodymyr » 2010-06-29 10:35:34

В больших, масштабируемых проектах ООП очень удобен.

Гость
проходил мимо

Re: функции или ООП PHP?

Непрочитанное сообщение Гость » 2010-06-29 11:51:39

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

Сейчас получается все ,к примеру, sql запросы и построение таблицы в одну функцию, другая таблица - другая функция?

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: функции или ООП PHP?

Непрочитанное сообщение Volodymyr » 2010-06-29 12:02:53

Тут надо определится или срузу собранные данные выводить в хт или собрать их в переменные, а потом выводить одним куском аля шаблоном.

Аватара пользователя
ADRE
майор
Сообщения: 2645
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: функции или ООП PHP?

Непрочитанное сообщение ADRE » 2010-06-30 16:53:19

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

snark
рядовой
Сообщения: 20
Зарегистрирован: 2009-11-19 0:37:43

Re: функции или ООП PHP?

Непрочитанное сообщение snark » 2010-07-02 18:40:57

мне вот тоже ооп тяжело дается. пользуюсь классами из dklab или другими, если потребуется, но сейчас мне предстоит разрабатывать один довольно сложный проект с нуля, и я хотел бы понять по какому принципу структурируются подобные вещи. а еще я не понимаю где нужно использовать объекты, а где классы. сколько ни читал про это - ничего не понял. в чужих скриптах вижу только классы. посоветуйте как лучше разобраться или объясните на пальцах :)

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: функции или ООП PHP?

Непрочитанное сообщение ProFTP » 2010-07-03 7:36:19

snark писал(а):мне вот тоже ооп тяжело дается. пользуюсь классами из dklab или другими, если потребуется, но сейчас мне предстоит разрабатывать один довольно сложный проект с нуля, и я хотел бы понять по какому принципу структурируются подобные вещи. а еще я не понимаю где нужно использовать объекты, а где классы. сколько ни читал про это - ничего не понял. в чужих скриптах вижу только классы. посоветуйте как лучше разобраться или объясните на пальцах :)
php.net примеров там достаточно + google.com
ProFTP писал(а): для не изобретения велосипедов есть Yii PHP Framework или Zend Framework или другие

но не помешало бы взять большую систему (Framework) и посмотреть...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: функции или ООП PHP?

Непрочитанное сообщение zg » 2010-07-03 11:09:42

snark писал(а):в чужих скриптах вижу только классы. посоветуйте как лучше разобраться или объясните на пальцах
класс имеет статичную память, а объект свою собственную, в этом и различие

Код: Выделить всё

// Это класс, который может иметь только статичные 
// переменные и функции
class a
{
  static $b = null;
  public $c = null;

  // Эта функция может использоваться как в объекте, так и без него,
  // поскольку не использует $this
  function set_b($value) {
    self::$b = $value;  // Установка статичного свойства класса
  }

  // Это функция может использоваться только в контексте объекта,
  // поскольку использует $this
  function set_c($value) {
    $this->c = $value;  // Установка свойства объекта
  }
}

// Работа с классом
a::set_b('one');
echo a::$b, PHP_EOL;

// Работа с объектом
$a = new a();
$a->set_b('two');    // Установка статичных свойств класс работает и для объекта
$a->set_c('three');  // Для объекта доступны нестатичные свойства

// Вывод свойства объекта
echo $a->c, PHP_EOL;

// Вывод свойства класса
echo a::$b, PHP_EOL; 
результат работы

Код: Выделить всё

one
three
two

Аватара пользователя
ADRE
майор
Сообщения: 2645
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: функции или ООП PHP?

Непрочитанное сообщение ADRE » 2010-07-04 17:14:47

вот не могу придумать пример для чего мне может понадобиться класс... =)
--
ProFTP
Покажи как правильно юзать классы на перле, а то мне кажется что это те же самый функции просто вызываются по другому...
//del

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: функции или ООП PHP?

Непрочитанное сообщение zg » 2010-07-04 17:54:15

ADRE писал(а):вот не могу придумать пример для чего мне может понадобиться класс...
классы без создания объектов используют просто, как пространства имён. К примеру, так

Код: Выделить всё

class db {
  function query($sql. $link = null) {
    if ( !($res = mysql_query($sql, $link)) )
      throw new Exception('MySQL Error: '. mysql_error());
    
    return $res;
  }
}

$res = db::query('SELECT * FROM `table`');
... 

Аватара пользователя
ADRE
майор
Сообщения: 2645
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: функции или ООП PHP?

Непрочитанное сообщение ADRE » 2010-07-04 18:35:52

аа ) в общем разница только в организации работы с памятью... правильно?
//del

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: функции или ООП PHP?

Непрочитанное сообщение zg » 2010-07-04 19:12:53

ADRE писал(а):аа ) в общем разница только в организации работы с памятью... правильно?
в принципе да, это самое главное. На этом и держится ООП.

Гость
проходил мимо

Re: функции или ООП PHP?

Непрочитанное сообщение Гость » 2010-07-05 15:23:17

когда в пользовательских функциях определяется например переменная $a = 10, а потом говорится global $a, то после этого эта переменная стает доступной для всего сценария? если не писать lobal $a, то эта переменная не будет видна дальше функции?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: функции или ООП PHP?

Непрочитанное сообщение zg » 2010-07-05 16:17:49

Гость писал(а):а потом говорится global $a, то после этого эта переменная стает доступной для всего сценария?
нет, наоборот, переменная из глобального адресного пространства будет доступна в текущем пространстве функции.

Код: Выделить всё

// Пространство вне функции/класса считается глобальным
$a = 10;

function echo_a() {
  global $a;  // Получаем доступ к глобальной переменной
  echo ++$a, PHP_EOL;  // Увеличиваем занчение переменной и выводим
}

echo_a();
echo_a();
echo $a, PHP_EOL;

// Результат работы
11
12
12
того же эффекта можно добиться и используя массив $GLOBALS, который доступен везде:

Код: Выделить всё

// Пространство вне функции/класса считается глобальным
$a = 10;

function echo_a() {
  echo ++$GLOBALS['a'], PHP_EOL;  // Увеличиваем значение глобальной переменной и выводим
}

echo_a();
echo_a();
echo $a, PHP_EOL; 

Гость
проходил мимо

Re: функции или ООП PHP?

Непрочитанное сообщение Гость » 2010-07-05 19:27:54

я конечно книги и статьи про это читаю, пока что не до конца догоняю. Вот в чем вопрос: например в первой ф-ии получили каким-либо образом переменную $d. Ее надо использовать во второй ф-ии, пишу f2($d){...}. И чтобы использовать $d во второй ф-ии мне надо в первой написать global $d. Так?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: функции или ООП PHP?

Непрочитанное сообщение zg » 2010-07-05 21:10:19

В пхп есть всего два адресных пространства - глобальное и локальное. Глобальное, это то, которые работеает вне функций; лоакльное только внутри функций/объектов/классов. Иными словами:

Код: Выделить всё

echo 'Hello, world!';  // Глобальное пространство

function hello()
{
  echo 'Hello, world!';  // Адресное пространство функции
} 
Получить доступ в пространство функции можно только через аргументы, которые функция принимает на вход. А вот из функции данные могут вернуться в виде результата работы (return), либо функция может забраться в глобальное пространство и там нагадить, или функция может подпортить аргументы, переданные по ссылке.

Простой пример:

Код: Выделить всё

$a = 1;
$b = 3;

// Классический вариант использования функций
function sum1($arg1, $arg2){  // Аргументы передаются на вход
  return $arg1 + $arg2;  // Результат на выходе
}

// Функция, которая считается себя самой умной
function sum2() {
  global $sum, $a, $b;  // Лезет в глобальное пространство
  $sum = $a + $b;  // И сама решает, куда, что пихать
}

// Си-шный вариант функции
function sum3($arg1, $arg2, &$result) {  // Третий аргумент передаётся по ссылке, об этом говорит & перед ним
  $result = $arg1 + $arg2;  // Портим аргументы, переданные по ссылке
}

// Используем функции

// Мы сами решаем, что передать на вход функции и как использовать результат
echo sum1($a, $b), PHP_EOL;

// Мы запускаем функцию в слепую и надеемся, что она что-то сделает
sum2();
echo $sum, PHP_EOL;

// Используем лишнюю переменную, чтобы сохранить результат
sum3($a, $b, $result);
echo $result, PHP_EOL; 
все три функции выведут одинаковый результат, но все три рабоают по-разному. В данном случае верным решением является только первый вариант.

Чтобы передать результат работы одной функции к другой, нужно этот результат сохранить в переменную и передать её в виде аргумента.

Код: Выделить всё

$sum = sum1(1, 10);
print_r($sum); 

Гость
проходил мимо

Re: функции или ООП PHP?

Непрочитанное сообщение Гость » 2010-07-07 13:23:58

спасибо, исчерпывающий ответ
еще сюда же вопрос, все про функции
если например есть такое:

Код: Выделить всё

ф-ия test()  {
global $mass_usluga;

.......
$select = "select * from Usluga where Id != '$x[Usluga]'";
$res = mysql_query($select, $link);
while($row21 = mysql_fetch_assoc($res21))       {
$mass_usluga = $row21;
}

ф-ия test2($mass_usluga)   {
....
        echo "<td align=center  colspan=3><select name=usluga>";
                        while ($mass_usluga)    { //1
        echo "<option>$mass_usluga[Name]</option>";
                                                        }//1

}

во второй ф-ии должна выводиться формочка выбора. То что написал не работает. Пробовал еще различные варианты. В связи с этим возник вопрос:
возможно как-то передать во вторую ф-ию значения из первой ф-ии, в которой она получает значения в цикле.