Страница 1 из 1

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

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

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

Добавлено: 2010-06-28 9:40:22
ProFTP
как хочешь...

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

но не помешало бы взять большую систему (Framework) и посмотреть...

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

Добавлено: 2010-06-29 9:09:52
Гость
ну, а есть некоторая граница, когда надо использовать ООП?

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

Добавлено: 2010-06-29 10:35:34
Volodymyr
В больших, масштабируемых проектах ООП очень удобен.

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

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

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

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

Добавлено: 2010-06-29 12:02:53
Volodymyr
Тут надо определится или срузу собранные данные выводить в хт или собрать их в переменные, а потом выводить одним куском аля шаблоном.

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

Добавлено: 2010-06-30 16:53:19
ADRE
Volodymyr писал(а):Тут надо определится или срузу собранные данные выводить в хт или собрать их в переменные, а потом выводить одним куском аля шаблоном.
для больших проектов где много разработчиков - вообще рай... это ООП.
а если только морда и пр. хватит функций...

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

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

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

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

но не помешало бы взять большую систему (Framework) и посмотреть...

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

Добавлено: 2010-07-03 11:09:42
zg
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

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

Добавлено: 2010-07-04 17:14:47
ADRE
вот не могу придумать пример для чего мне может понадобиться класс... =)
--
ProFTP
Покажи как правильно юзать классы на перле, а то мне кажется что это те же самый функции просто вызываются по другому...

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

Добавлено: 2010-07-04 17:54:15
zg
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`');
... 

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

Добавлено: 2010-07-04 18:35:52
ADRE
аа ) в общем разница только в организации работы с памятью... правильно?

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

Добавлено: 2010-07-04 19:12:53
zg
ADRE писал(а):аа ) в общем разница только в организации работы с памятью... правильно?
в принципе да, это самое главное. На этом и держится ООП.

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

Добавлено: 2010-07-05 15:23:17
Гость
когда в пользовательских функциях определяется например переменная $a = 10, а потом говорится global $a, то после этого эта переменная стает доступной для всего сценария? если не писать lobal $a, то эта переменная не будет видна дальше функции?

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

Добавлено: 2010-07-05 16:17:49
zg
Гость писал(а):а потом говорится 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. Так?

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

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

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

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

}

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

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

Добавлено: 2010-07-07 14:14:20
Гость
уже не надо, сам справился