Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: class.php  (Прочитано 62264 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Melifaro
Гость
« Ответ #30 : 20-06-2004 14:11 » 

В чем разница prev=0 и prev=$id
Для чего это сделано, понять никак не могу.
Гром, помоги пожалуйста
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 20-06-2004 18:00 » 

Melifaro, не надо гадать - лучше почитать. Сначала попробуй по мануалу понять, а если непонятно - спрашивай.

Почитай ман вот здесь (ф-ии и передача параметров):
http://ru2.php.net/manual/ru/language.functions.php

Тут написано как вызываются callback ф-ии, в том числе и в объектах:
http://www.php.net/manual/ru/language.pseudo-types.php#language.types.callback
Тут про call_user_func(): http://ru.php.net/manual/ru/function.call-user-func.php
Обе ссылки с примерами.

Значок & означает "ссылка". О ссылках тут: http://ru2.php.net/manual/ru/language.references.php
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #32 : 21-06-2004 09:04 » 

Melifaro, а где Улыбаюсь

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

А птичку нашу прошу не обижать!!!
Melifaro
Гость
« Ответ #33 : 21-06-2004 12:59 » 

Гром, в методе show_main_topics_menu_cat() при работе с базой (здесь используется таблица топикс) появляется поле prev, я просто не понимаю зачем оно нужно. Я посмотрел по phpmyadmin таблицу topics на моем сайте www.melifaro.h12.ru там идет три записи в каждой из которой значения prev и next равны и равны нулю. Каждой записи соответствует раздел: Статьи по PHP, Статьи по MySQL и Статьи по Apache. Я просто не вижу варианта когда эти значения prev и next  в таблице topics не равны нулю.

Вот листинг метода:
Код:
function show_main_topics_menu_cat()
{

$res = $this->sql_query("SELECT * from ".$this->prefix."topics WHERE prev=0 ORDER BY accessnum ASC");

if (!$res) return "";

$result="<table width=100% border=0 cellspacing=0 cellpadding=0>";
$temp = "";
while (1)
{
        $myrow = mysql_fetch_array(@$res);
        if (!$myrow) break;



                $name = stripslashes($myrow["name"]);
                $descr = stripslashes($myrow["descr"]);
                $id = $myrow["id"];

        $temp = $temp."<tr><td width = 50% valign = top><div class = main>";

        $temp = $temp."<a href=view.php?id=$id title='$descr'><font size=2><b>$name</b></font></a><br>";

        $res2 = $this->sql_query("SELECT * from ".$this->prefix."topics WHERE prev=$id ORDER BY accessnum ASC");

                while ($myrow2 = mysql_fetch_array($res2))
                {
                        $name2 = stripslashes($myrow2["name"]);
                        $descr2 = stripslashes($myrow2["descr"]);
                        $id2 = $myrow2["id"];
                        $temp= $temp."   <a href=view.php?id=$id2 title='$descr2'><font size=1>".$name2."</font></a> : };
                }



        $myrow = mysql_fetch_array($res);
        if (!$myrow){
        $temp=$temp."</td></tr>";
        break;
        }

                $name = stripslashes($myrow["name"]);
                $descr = stripslashes($myrow["descr"]);
                $id = $myrow["id"];

        $temp = $temp."</div></td><td width = 50% valign = top><div class = main>";
        $temp = $temp."<a href=view.php?id=$id title='$descr'><font size=2><b>$name</b></font></a><br>";

        $res2 = $this->sql_query("SELECT * from ".$this->prefix."topics WHERE prev=$id ORDER BY accessnum ASC");

        while ($myrow2 = mysql_fetch_array($res2))
                {
                        $name2 = stripslashes($myrow2["name"]);
                        $descr2 = stripslashes($myrow2["descr"]);
                        $id2 = $myrow2["id"];
                        $temp= $temp."   <a href=view.php?id=$id2 title='$descr2'><font size=1>".$name2."</font></a> : };
                }

        $temp = $temp."</div></td></tr>";

}

        $result=$result.$temp;
        $result=$result."</table>";
        return $result;
}



Мне не совсем понятно для чего нужно вот это:
Код:
$res2 = $this->sql_query("SELECT * from ".$this->prefix."topics WHERE prev=$id ORDER BY accessnum ASC");

                while ($myrow2 = mysql_fetch_array($res2))
                {
                        $name2 = stripslashes($myrow2["name"]);
                        $descr2 = stripslashes($myrow2["descr"]);
                        $id2 = $myrow2["id"];
                        $temp= $temp."   <a href=view.php?id=$id2 title='$descr2'><font size=1>".$name2."</font></a> : };
                }
Оно повторяется два раза
« Последнее редактирование: 28-11-2007 18:23 от Алексей1153++ » Записан
Melifaro
Гость
« Ответ #34 : 21-06-2004 13:40 » 

RXL, спасибо за ссылки все прочитал, вроде все понял даже  Отлично , но вот с References не пошло чо-то. Не понял я что значат эти ссылки. Понял только что к одному и тому же контенту можно обратиться под разными именами. И связывают две переменные указывающие на одно и тоже место вот так: $a=&$b, все остальное не понял (my English is bad) Отлично . Help me please with your explains, if it possible.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #35 : 21-06-2004 14:12 » 

Melifaro, поясняю...
В таблице топикс не содержаться статьи, а только названия разделов.
Главные разделы имеют в prev всегда 0 - это и есть признак того, что это Главный раздел...

В prev подраздела, будет записан id Главного раздела к которому принадлежит данный подраздел...

next - пока нигде не используется.
Вводилась она для работы с связной цепью разделов но на данный момент пока не используется и видимо не будет использоваться, так как next может быть не один...
Грубо говоря, это издержка разработки пока Улыбаюсь


По поводу кода...
Если ты обратишь внимание в одном из вариантов вывода выводится и список Главных разделов и список подразделов в них.
Я делал это в виде однопроходного цикла, поэтому код который ты привел появляется для внутреннего просмотра каждого Главного раздела и вывода списка его подразделов.

И не два раза, а это немного разныйц код Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #36 : 21-06-2004 14:13 » new

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

В данном случае ($this->func_arr = &$b;), $b использовалось в вычислении (с короткими именами проще писать), а чтобы не копировать, т.к. имя $b уже не нужно, используется ссылка.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Melifaro
Гость
« Ответ #37 : 21-06-2004 14:30 » 

Гром, спасибо. Теперь понял  Отлично
Но на этом надеюсь данная тема не будет закончена, т.к. там еще много функций  Отлично . Но я так думаю, что они все подобны этой, но все равно я думаю вопросы будут  Улыбаюсь
Записан
Melifaro
Гость
« Ответ #38 : 21-06-2004 15:19 » 

RXL, вроде бы все понятно. Давай тогда заново проанализируем две функции. (Если я тебя еще не достал  :oops:  :oops:  :oops: )

Код:
function replace_template2($match) {
return call_user_func(array(&$this,$this->func_arr[$match[0]]));
}

function replace_template($text) {
return preg_replace_callback($this->regexp,array(&$this,'replace_template2'),$text);
}

Получается что метод replace_template2 вызывает одну из функций массива $b, принимая в качестве параметров &$this - это если я правильно все понял ссылка на обьект (вот тут если честно мне непонятно на какой именно обьект, может быть вообще это ссылка на сам класс или эта ссылка на любой обьект данного класса который обратывается в данный момент?); $this->func_arr[$match[0]] - это имя метода который нужно будет вызвать.

Метод replace_template меняет в переменной $text(я так подозреваю, что это полный текст файла-шаблона, это я еще не смотрел) любой из шаблонов $this->regexp на результат работы соответствующего метода данного обьекта array(&$this,'replace_template2'). И потом это уже где-то выводиться в браузер.

Мне только не совсем понятна переменная array(&$this,'replace_template2'), почему нет параметра у функции 'replace_template2(параметр?Не понял?) и опять как-то эта ссылка на обьект мне не нравиться, почему тут вообще массив, если должна быть одна переменная.

Вот.  RXL, help!  Отлично  :oops:
« Последнее редактирование: 28-11-2007 18:24 от Алексей1153++ » Записан
Melifaro
Гость
« Ответ #39 : 21-06-2004 15:28 » 

А почему array я понял - потому что вызывается метод обьекта, а не просто функция. Но почему нет параметра у replace_template2().
Записан
Melifaro
Гость
« Ответ #40 : 21-06-2004 15:32 » 

Я за последние два дня так жестко в профессиональном плане поднялся  Отлично . Спасибо вам, RXL и Гром!  Отлично
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #41 : 21-06-2004 18:36 » 

Melifaro, поясняю:

1) $this - это переменная содержит ссылку на текущий объект, метод которого вызван. Создается она автоматически, когда исполняется код объекта и имеет смысл только внутри этого объекта.

2) в preg_replace_callback() указывается только имя ф-ии. Список передаваемых параметров определяешь не ты - это определено в коде php (а точнее, в коде preg_replace_callback() ). Ведь вызывается callback ф-ия не тобой явно, а preg_replace_callback() - ей и решать, что передать. Прототип описан в мануале: функция($обнаруженная строка).

3) Последовательность действий:

preg_replace_callback(), используя регулярное выражение, находит куски текста, которые передает в replace_template2().
Там, по этой строке, выбирается ф-ия (из методов объекта), которая вернет некий текст. replace_template2() возвращает этот текст.
preg_replace_callback() заменяет этим текстом найденую строку.
Поиск продолжается.
Когда весь текст проверен, replace_template() возвращает результат.

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

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Melifaro
Гость
« Ответ #42 : 22-06-2004 17:09 » 

RXL, спасибо за помощь. Есть у меня все эти самоучители, но от них толку мало там больше чем написания счетчика или гостевой дело не доходит.
Есть крутая книжка "Профессиональное PHP программирование 2-е издание   Prorammer to programmer", вот там все круто, но сложновато. Да еще и 1000 страниц, чо-то пока не могут осилить, и к тому же там уже требуется знание всех веб-технологий на каком-то определенном уровне. А я пока ламер  Отлично . Но мне уже начинает надоедать им быть.
Записан
Melifaro
Гость
« Ответ #43 : 22-06-2004 19:37 » 

Кстати, RXL, может быть ты мне дашь какие-нибудь рекомендации по изучению php? Основной синтаксис я знаю (управляющие конструкции, циклы, массивы, функции работы с базой данных и файлами, кукисы немного, немного сокеты). Что вообще нужно знать чтобы нормально программировать на PHP+MySQL, основной синтаксис SQL я тоже вроде бы знаю.  Улыбаюсь
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #44 : 23-06-2004 07:34 » 

Melifaro, я изучал по такой же книге, только первого издания. Остальное я черпаю из онлайнового мануала и опытным путем.
Трудно сказать, что надо - это ты сам поймешь на практике. Попробуй сделать что-нибудь пробное из 2-3 связанных страниц, без наворотов и графики. Обязательно помучайся с формами.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Melifaro
Гость
« Ответ #45 : 23-06-2004 08:18 » 

RXL, тебе почему-то кажеться, что я php начал вчера заниматься. На самом деле это не так. Кое-что я уже писал: гостевую с полной системой администрирования, поисковик, ленту новостей тоже с полной администрацией. То есть с формами уже все ОК!  Улыбаюсь.

Ты вот говоришь опытным, как думаешь изучение движка Engine VU и последующая его доработка под свои нужды сканает? Просто все, что я читаю в книге "PtP" очень быстро забывается, так как не находит применение в моих задачах.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #46 : 23-06-2004 11:35 » 

Melifaro, что делать, не обижайся, но такое впечатление складывается из вопросов. Из меня хреновый учитель... Я то же давно изучал и многого не помню, но возникает вопрос - я стараюсь в нем по возможности детально разобраться. Так и получаются знания. А чем больше узнаешь, тем больше становится неизученного и текушие свои знания кажутся незначительными и поверхностными. Так что, как видишь, к себе я критичнее отношусь Ага
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #47 : 23-06-2004 13:02 » 

Melifaro, все зависит от другого.
Скажем я не думаю, что бы движек который тебе достался был чем то супер интересным, он стандартен, как и любое программирование.

Другое дело, что его доработка дает возможность разбираться в чужом коде, а код там чисто Сишный я ведь сишник, и идея прикольная ИМХО.

Может это самонадеяно но думаю такое изучение чужого кода полезно с точки зрения самого программирования, без привязки к языку Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
Melifaro
Гость
« Ответ #48 : 23-06-2004 17:02 » 

Я тоже так считаю, Гром, мне бы сечас просто научиться именно программировать без разницы на каком языке, но  коль уж мне нравитьося Web, то пусть это будет PHP.

RXL, из тебя нормальный учитель, ты уже многое мне обьяснил и я все понял. Но вот ти все эти функии callback'и я не видел ни в одном самоучителе и в книге PtP их тоже вроде бы нет, поэтому я их и не знал.

Цитата

 А чем больше узнаешь, тем больше становится неизученного и текушие свои знания кажутся незначительными и поверхностными

Это ты точно подметил  Отлично вообще капец какой-то
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #49 : 23-06-2004 21:52 » 

Цитата
вообще капец какой-то
Первоисточник точно не мой. Простые истины.
« Последнее редактирование: 28-11-2007 18:26 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Melifaro
Гость
« Ответ #50 : 24-06-2004 09:07 » 

Ясен перец. Но все равно это обидно, учишь учишь, думаешь еще чуть-чуть и ты уже клево разбираешься в веб-технологиях, но чем больше учишь, тем больше понимаешь, что этих технологий просто до жопы много, причем в них во всех надо разбираться,  и тебе до них еще как до луны.
Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines