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

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

Народ, а нигде нет описания работы этого скрипта? Или этот же файл с комментариями. Очень охото узнать как он работает, но знаний не хватает пока
Записан
Melifaro
Гость
« Ответ #1 : 15-06-2004 16:00 » 

И что за фукция такая flush(), чо-то я мануале перевести толком не могу?
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #2 : 15-06-2004 20:57 » 

http://www.php.net/manual/ru/function.flush.php
Записан

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

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


« Ответ #3 : 16-06-2004 07:24 » 

Описание работы самого скрипта отсутствует - но готовиться ...
Записан

А птичку нашу прошу не обижать!!!
Melifaro
Гость
« Ответ #4 : 16-06-2004 14:49 » 

RXL, я говорю что не могу перевести в мэнуале по пхп что эта функция делает, а ты мне ссылку на этот мэнуал даешь  Улыбаюсь .

Гром, отлично, а как скоро?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

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


« Ответ #5 : 16-06-2004 18:30 » 

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

А функция Флаш выводит на экран то, что уже сделано, т.е. проталкивает в сокет содержимое отработанное скриптом не дожидаясь его окончания.
Страница быстрее грузится Улыбаюсь
Записан

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

Вот оказывается все как просто с этим flush'ем. Достаточно было написать одну строчку, спасибо.  Отлично Я подробно еще не смотрел щас сессия идет, но скоро собираюсь посмотреть как этот скрипт работает, очень интересно.

Кстати, можешь прокомментировать следующую таблицу:

$t1="CREATE TABLE ".$prefix."articles (
  id bigint(20) NOT NULL auto_increment,
  id_topics int(11) NOT NULL default '0',
  authorname varchar(50) NOT NULL default '',
  authoremail varchar(75) NOT NULL default '',
  nameoftxt varchar(255) NOT NULL default '',
  descript text NOT NULL,
  text mediumblob NOT NULL,
  count_view bigint(20) NOT NULL default '0',
  KEY id (id),
  KEY view (count_view),
  KEY name (nameoftxt)
  ) TYPE=MyISAM COMMENT='Main table' AUTO_INCREMENT=0";

Особенно интересны ключи KEY:
KEY view (count_view),
KEY name (nameoftxt)

Я чо-то понять не могу какие ключи вообще к чему относяться.Помоги пожалуйста. :oops:  Отлично
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #7 : 17-06-2004 07:11 » 

Melifaro, это я что-то невнимательно читал. Я то считал, что ф-ия широкоизвестная (на многих языках есть) и подумал, что ты не знаешь где искать...

articles - статьи.
Цитата
Особенно интересны ключи KEY:
KEY view (count_view),
KEY name (nameoftxt)
count_view - счетчик просмотров. Проиндексирован, я так понимаю, с целью ускорения сортировки и выборки наиболее популярных статей.
nameoftxt - название (заголовок) статьи. Индексируется для поиска, но тут это бессмыслено - это поможет только при поиске начального текста заголовка. Может использоваться при сортировке, но, опять же, не эффективно. Я бы этот индекс убрал.
Есть и другие вопросы "зачем"...
Записан

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

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


« Ответ #8 : 17-06-2004 08:25 » 

RXL, ответ точен. Но не понятно почему ты сказал, что индекс неэффективен для сортировки.
Есть три типа сортировки и ключи по наиболее частым параметрам - по ИД, колличеству просмотров и по названиям.
Т.е. есть прямой быстрый доступ по ключу....
Записан

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

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

WWW
« Ответ #9 : 17-06-2004 09:06 » 

Гром, я сомневаюсь, что для типа char(255) индекс будет пригоден для сортировки. Быстрее всего, оптимизатор mysql будет использовать сам столбец. Проверить это можно через explain.

Насчет "еще":
1) зачем использовать bigint в id и count_view? Не слишком ли оптимистично - 2^64 ? Достаточно int, или int unsigned - 4млрд таки.
2) KEY id (id) - для auto_increment нужен индекс unique или primary key (то же самое, но со специменем). По крайней мере, так сказано в мануале. key - неуникальный индекс.
3) для поля text лучше взять тип text, а не blob: учитывая, что содержимое текстовое, разница будет только в операциях сравнения - blob чуствителен к регистру символов. Поиск лучше делать без учета регистра. Конечно, если поиска по тексту статьи не предвидится, то это не имеет значения.
Записан

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

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


« Ответ #10 : 17-06-2004 11:10 » 

RXL,
1. Сам не знаю - решил, что так будет лучше Улыбаюсь
2. А он и есть примари, иначе автоинкремент не ставился Улыбаюсь Я по крайней мере так ставил и делал...

3. Это я вообще не умею пока Жаль поиски Жаль


Что значит "будет исползовать са столбец"Не понял :?:
Записан

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

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

WWW
« Ответ #11 : 17-06-2004 12:04 » 

Гром, у меня совсем не primary:
Код:
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | bigint(20)   |      | MUL | NULL    | auto_increment |
| id_topics   | int(11)      |      |     | 0       |                |
| authorname  | varchar(50)  |      |     |         |                |
| authoremail | varchar(750  |      |     |         |                |
| nameoftxt   | varchar(255) |      | MUL |         |                |
| descript    | text         |      |     |         |                |
| text        | mediumblob   |      |     |         |                |
| count_view  | bigint(20)   |      | MUL | 0       |                |
+-------------+--------------+------+-----+---------+----------------+

+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
| Table     | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
| _articles |          1 | id       |            1 | id          | A         |        NULL |     NULL | NULL   |         |
| _articles |          1 | view     |            1 | count_view  | A         |        NULL |     NULL | NULL   |         |
| _articles |          1 | name     |            1 | nameoftxt   | A         |        NULL |     NULL | NULL   |         |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+---------+
Таблицы создавала твоя программа.
У меня MySQL 3.23.49.
« Последнее редактирование: 28-11-2007 18:18 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

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

WWW
« Ответ #12 : 17-06-2004 12:19 » 

Протестировал и вот что пролучил: если в эту таблицу вставлять с id=0 (или вообще ео не указывать), то генерится последовательность, а если назначить id равным уже существующему номеру, то insert работает без ошибок и получаются две строки с одним id.
Записан

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

Да, мне тоже показалось странным, что напротив id не поставленно PRIMARY KEY. И я вот еще чего не понял:

KEY id (id),
KEY view (count_view),
KEY name (nameoftxt)

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

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

WWW
« Ответ #14 : 19-06-2004 14:03 » 

Melifaro, нет - имена ключей не зависят от имен столбцов. Просто, если, при создании ключа, не указать его имя, то MySQL назначает ключу имя первого столбца в ключе.
Записан

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

RXL, Спасибо. Теперь понял вроде бы.
Записан
Melifaro
Гость
« Ответ #16 : 19-06-2004 14:54 » 

Это был я, не распознал меня форум почему-то  Улыбаюсь
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

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


« Ответ #17 : 20-06-2004 08:46 » 

Хм RXL, странно - я проверю.
А как объяснить что при автоинкременте дуликаты добавляются, странно, я попробую посмотреть какие у меня есть ключики, посмотреть почему уникальный id не отслеживается автоматом, хотя я именно так ставил создавал, после чего делал экспорт с таблицы, для программки инсталлятора.

Melifaro, как там дела???
Записан

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

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

WWW
« Ответ #18 : 20-06-2004 09:48 » 

Гром, автоинкремент, всего лишь, создает новый номер, который берется из описания таблицы (хранится отдельно и обновляется по максимальному значению при вставке и модификации). Контролем же, за дубляжем, занимается именно индекс. Если он не уникальный, то и контроля такого нет.

Замечания:
1) дублирование при auto_increment-е не происходит, а только при явной вставке значения.
2) при корректировании через ALTER TABLE table AUTO_INCREMENT=n работает автоматическая проверка: если n<=max(id), то устанавливается max(id)+1.

Т.е., если не будет явной вставки, то и боятся нечего. Но, коли столбец содержит уникальные значения, то и индекс должен быть соответствующий.
Записан

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

Гром, да пока некогда серьезно разбираться с этим скриптом, завтра экзамен. Потом 25 экзамен. И начну с ним выяснять отношения  Отлично
Записан
Melifaro
Гость
« Ответ #20 : 20-06-2004 10:10 » 

Гром,

function site()
{
 global $prefix, $id, $onelistcount, $sort, $startpoint, $newarticle, $lastnews, $lastfiles, $filelistcount,
 $lastlinks, $linklistcount; -------Все вот эти глобалы, откуда они беруться? В том файле где идет вызов класса(include "php/class.php") или как?

 $this->art_id = @$id; // For articles    
 $this->art_topic_id = @$id;                
 $this->art_onelistcount = @$onelistcount;
 $this->art_sort = @$sort;                
 $this->art_startpoint = @$startpoint;
 $this->art_count=@$newarticle;
 $this->last_news = $lastnews;

 $this->file_id = @$id;
 $this->file_count = $lastfiles;
 $this->file_topic_id = @$id;
 $this->file_onelistcount=$filelistcount;
 $this->file_sort = @$sort;
 $this->file_startpoint = @$startpoint;

 $this->link_id = @$id;
 $this->link_count = $lastlinks;
 $this->link_topic_id = @$id;
 $this->link_onelistcount=$linklistcount;
 $this->link_sort = @$sort;
 $this->link_startpoint = @$startpoint;


Что вот это значит:
$this->regexp=&$re; // использование жестких ссылок - метод оптимизации - можно и без них
 $this->func_arr = &$b;



И вот эти две функции если не трудно: :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);
    }
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #21 : 20-06-2004 10:39 » 

Melifaro, это замена шаблонов. Жаль поиск сглючил - была дисскусия на эту тему.

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

call_user_func() - штатная ф-ия php, позволяющая вызывать ф-ии по имени (текстовой строке). Конструкция array(ссылка на объект, имя ф-ии) нужна для обращения к методу класса (такое вот извращение).

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

См. в мануале ф-ию preg_replace_callback(). Она выполняет замену в тексте (3-ий аргумент) по pcre-шаблону (1-ый аргумент) на результат выполнения ф-ии (2-ой аргумент). Ф-ия выполняется на каждую замену.

Замена с использованием callback ф-ий позволяет заменять на динамические данные. Классическая замена делает статическую замену - одну строку на другую.
« Последнее редактирование: 28-11-2007 18:20 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

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

WWW
« Ответ #22 : 20-06-2004 10:44 » 

Вот и тема та самая: https://forum.shelek.ru/index.php/topic,2301.0.html
Записан

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

Мда, капец какой-то чо-то не совсем все понятно. Все равно спасибо, потом разберусь Улыбаюсь
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

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


« Ответ #24 : 20-06-2004 11:32 » 

RXL, Ок - я буду разбираться.
Melifaro, а оно тебе надо Не понял Добавляешь свой шаблон, рисуешь функцию замены и все Улыбаюсь

А насчет переменных, из коммандной строки беруться, когда формирую тип запроса идет вызов с параметрами, вот там они и берутся, когда они есть.
Записан

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

Про переменные понял, thanks. А на счет шаблонов и их замены: мне сначало надо хоть один раз посмотреть как это люди делают, а потом самому уже делать  Отлично . Я такого еще не использовал. Так что придется разбираться
Записан
Melifaro
Гость
« Ответ #26 : 20-06-2004 12:26 » 

Все кажись вьехал: до меня просто не доходило как это все в браузер выводиться - replace_template($str) везде написано, я давай этот метод смотреть - там нигде вывода в браузер нету, и только зас заметил, что везде после $repl= $site->replace_template($str);   идет echo $repl; Капец слепой  Улыбаюсь

А вот это так и не понял:
$this->regexp=&$re; // использование жестких ссылок - метод оптимизации - можно и без них
$this->func_arr = &$b;

Что это значит??? Как понимать символ & перед переменной?

Затем, что за массив такой mutch? Сами функции  call_user_func и preg_replace_callback я понял, спасибо RXL. Но переменные которые им передаются не полностью понятны

Допустим вот этот метод:
function replace_template2($match) {
    return call_user_func(array(&$this,$this->func_arr[$match[0]]));
}
Я так понимаю, что  у функции call_user_func здесь только один фактический параметр - массив. Короче не могу вот эту запись расшифровать  Улыбаюсь
array(&$this,$this->func_arr[$match[0]]) - чо это такое???

Помоги пожалуйста  Отлично  Отлично  Отлично
Записан
Melifaro
Гость
« Ответ #27 : 20-06-2004 12:37 » 

Сначало было сформировано рег выражение вида:
([!MAIN_TOPICS_MENU_LINE!]|[!MAIN_TOPICS_MENU_CAT!]|...|[!SHOW_STATS!]), затем переменной this->regexp присваивают это значение, но в чем фишка символа & Не понял?
Записан
Melifaro
Гость
« Ответ #28 : 20-06-2004 12:58 » 

Кажись понял: & - значит только значения массива (то есть не ключи, а значения), так чтоли?. С помощью этих двух функий (replace_template и replace_template2) происходит выборка какую функию нужно вызвать для того чтобы сделать выборку из базы и вся такая фигня, то есть как раз этот массив $b - его значения это и есть имена методов. Наконец-то дошло, вроде бы больше ничего обьянять пока не нужно.

Гром, ну ты замутил тут механизм  Отлично

Но все равно поясни строчку
array(&$this,$this->func_arr[$match[0]])
вдруг я ее неправильно проитерпретировал пожалуйста  Отлично
Записан
Melifaro
Гость
« Ответ #29 : 20-06-2004 13:24 » 

В таблице topics
$t7="CREATE TABLE ".$prefix."topics (
  id int(11) NOT NULL auto_increment,
  next int(11) NOT NULL default '0',
  prev int(11) NOT NULL default '0',
  name varchar(255) NOT NULL default '',
  descr varchar(255) NOT NULL default '',
  accessnum int(11) NOT NULL default '0',
  KEY id (id)
) TYPE=MyISAM AUTO_INCREMENT=0";

Для чего нужны поля next и prev, что они значат???
Записан
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 » 

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