[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Мои (глупые) вопросы по ООП
Krevedko
Приступил так сказать вплотную с твердым намерением понять (мозг скрипит посильнее, чем после переадаптации от скриптов неув.Попова к скриптам ув. Николая smile.gif )

Значит написал такой вот бред:


class PageCounter
{
private $Total;
private $All_Quantity;

#Метод определения количества записей в таблице
function Data_Quantity($table)
{
$result = mysql_query("SELECT COUNT(*) AS `cnt`
FROM `"
.$table."`
"
, CONNECT);
if($result)
$this->All_Quantity = mysql_result($result, 0);
}

#Метод определения диапазона вывода страниц
function List_Range($quantity, $page = 1)
{
#Всего страниц
$this->Total = ceil($this->All_Quantity / $quantity);

#С какой страницы начинаем вывод
$page = intval($page);
if(empty($page) or $page < 0)
$page = 1;
if($page > $this->Total)
$page = $this->Total;
$start = $page * $quantity - $quantity;
return $start;
}
}



Выводим

$page = isset($_GET['page'])?$_GET['page']:1;
$test = new PageCounter();
echo $test -> List_Range($_SESSION['quantity'], $_GET['page']);


Выводит значение, равное - $quantity...(т.е -10 например) т.к. как я понял он не определяет $this->All_Quantity ..(видимо из верхнего метода не передается). Как тут сделать вообще ?

Помогите ph34r.gif



Спустя 1 минута, 26 секунд (13.11.2009 - 21:42) Krevedko написал(а):
чет как-то сдвинулся скрипт. у меня все ровненько если чё )

я так понимаю, что не определяется все-таки тут
if($result)
$this->All_Quantity = mysql_result($result, 0);

потому что $table мы не определили для передачи в метод :/

Спустя 11 минут, 12 секунд (13.11.2009 - 21:54) kirik написал(а):
Цитата (Krevedko @ 13.11.2009 - 13:42)
я так понимаю, что не определяется все-таки тут

Правильно понимаешь. А можно спросить, где ты вызываешь метод Data_Quantity чтобы посчитать количество записей? smile.gif

Спустя 8 минут, 56 секунд (13.11.2009 - 22:03) Krevedko написал(а):
наверное надо так


$page = isset($_GET['page'])?$_GET['page']:1;
$test = new PageCounter();
$test->Data_Quantity($_SESSION['table']);
echo $test -> List_Range($_SESSION['quantity'], $_GET['page']);

Спустя 8 минут, 17 секунд (13.11.2009 - 22:11) kirik написал(а):
Цитата (Krevedko @ 13.11.2009 - 14:03)
наверное надо так

Работает? smile.gif

Спустя 12 минут, 44 секунды (13.11.2009 - 22:24) Krevedko написал(а):
да biggrin.gif
ладно. буду дальше рыть.
не прощаемся ))

Спустя 1 час, 1 минута, 59 секунд (13.11.2009 - 23:26) kirik написал(а):
Можешь объявить магический метод-конструктор:
  class PageCounter
{
private $Total;
private $All_Quantity;

#Метод определения количества записей в таблице
function __construct($table)
{
// ......

и тогда делать так:
$test = new PageCounter($_SESSION['table']);
echo $test -> List_Range($_SESSION['quantity'], $_GET['page']);

Спустя 2 минуты, 39 секунд (13.11.2009 - 23:28) Joker написал(а):
Krevedko мне почему то кажется что это задание для еще не запущенного конкурса или я ошибаюсь?)

Спустя 13 минут, 36 секунд (13.11.2009 - 23:42) Krevedko написал(а):
какая разница конкурс не конкурс. я ооп хочу познать )))
Джокер-а вообще читай чат выше

Кирик-спасибо. Я так понимаю __construct автоматом выполняется при создании нового объекта ?
т.е. используем, чтобы лишний метод не вызывать, который и так всегда понадобится ?

Спустя 17 минут, 2 секунды (13.11.2009 - 23:59) glock18 написал(а):
Приплыли... конкурс обсуждаем.

Спустя 5 минут, 54 секунды (14.11.2009 - 00:05) Krevedko написал(а):
не конкурс, а ООП. Так раздел форума называется.

Спустя 6 минут, 3 секунды (14.11.2009 - 00:11) Gabriel написал(а):
ну чего вы прицепились к человеку ну постраничка как постраничка smile.gif или может побомбим все темы на форуме связанные с постраничками?
а человеку ой как охота научиться ООП ну дык пускай учиться smile.gif

Спустя 3 минуты, 59 секунд (14.11.2009 - 00:15) Krevedko написал(а):
Назрел новый вопрос...
создал еще один метод. В этом методе мне нужны переменные $quantity и$page из метода List_Range(). Я сделал так. Написал в конце List_Range()

$start = $page * $quantity - $quantity;
$this->Quantity = $quantity;
$this->Page = $page;
return $start;


и потом в новом методе обращался соответственно через
$this->Quantity и $this->Page

Это правильно ?

И как в новом методе обратится к $start (которая return $start; )

Спустя 2 минуты (14.11.2009 - 00:17) Krevedko написал(а):
Цитата (Gabriel @ 13.11.2009 - 21:11)
ну чего вы прицепились к человеку ну постраничка как постраничка smile.gif или может побомбим все темы на форуме связанные с постраничками?
а человеку ой как охота научиться ООП ну дык пускай учиться smile.gif

точно smile.gif
Я ж не прошу скрипт за меня писать. Я просто синтаксис спрашиваю.
Благодарю за поддержку biggrin.gif

Спустя 45 минут, 57 секунд (14.11.2009 - 01:03) kirik написал(а):
Цитата (Krevedko @ 13.11.2009 - 16:15)
Это правильно ?

Думаю что да. Только не забудь еще эти переменные в классе объявить.

Спустя 19 минут, 58 секунд (14.11.2009 - 01:23) Krevedko написал(а):
гм...и без объявления сработало blink.gif

и что по поводу второй половины вопроса

Цитата
И как в новом методе обратится к $start (которая return $start; )

Спустя 2 часа, 7 минут, 9 секунд (14.11.2009 - 03:30) kirik написал(а):
Цитата (Krevedko @ 13.11.2009 - 17:23)
и без объявления сработало


И должно, это ж php smile.gif

$arr[] = 12;
$arr[] = 13;
//...

- тоже работает, но правильнее определять переменную до того как ты будешь с ней работать:
$arr = array();
$arr[] = 12;
$arr[] = 13;
//...



Цитата (Krevedko @ 13.11.2009 - 17:23)
и что по поводу второй половины вопроса

1. либо принимать возвращаемое значение метода List_Range
2. либо определить переменную в классе, как ты сделал с Page и Quantity

Тут собственно все так же как и в процедурном подходе. Либо ты определяешь в функции глобальную переменную через global или забираешь результат функции.

Спустя 10 часов, 3 минуты, 56 секунд (14.11.2009 - 13:34) Krevedko написал(а):
Да. все заработало. Еще вопрос...

Практикуется ли из метода к функции обращаться ... (кстати я попробовал. работает %-) ) или лучше создать отдельный метод ?

Спустя 2 часа, 25 минут, 10 секунд (14.11.2009 - 15:59) Michael написал(а):
Цитата (Krevedko @ 14.11.2009 - 10:34)
Да. все заработало. Еще вопрос...

Практикуется ли из метода к функции обращаться ... (кстати я попробовал. работает %-) ) или лучше создать отдельный метод ?

Функции объекта - методы - работают с данными этого объекта, или специфические для этого типа объектов.
Всякие независимые функции не лепятся в объект просто для массы, а объявляются как глобальные, и уже внутри методов вызываются.

Спустя 14 минут, 4 секунды (14.11.2009 - 16:13) Krevedko написал(а):
в каком смысле объявляются как глобальные ?
ну вот у меня например есть функция

function valid($result)
{
...
}

в методе я ее просто вызываю
valid($result) и все работает. Нигде ее специально не объявлял.

Спустя 4 минуты, 49 секунд (14.11.2009 - 16:18) Michael написал(а):
Это ж она и есть - ГЛОБАЛЬНАЯ функция.
А метод объекта ты просто так не вызовешь - нужно через
имя_объекта->имя_метода().

Спустя 1 минута, 21 секунда (14.11.2009 - 16:19) Krevedko написал(а):
ну дык..что, бывают неГЛОБАЛЬНЫЕ функции чтоли ?
Тогда это уже не функции, а методы

Функция в функции невозможна, насколько я помню..вроде бы )

Спустя 21 минута, 13 секунд (14.11.2009 - 16:40) Michael написал(а):
Цитата (Krevedko @ 14.11.2009 - 13:19)
ну дык..что, бывают неГЛОБАЛЬНЫЕ функции чтоли ?
Функция в функции невозможна, насколько я помню..вроде бы

Вообще бывают, в php - нет, но это же скриптовый язык и интерпретатор к тому же.

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

А если строить объектами, то каждый объект имеет свои данные и свои же функции для обработки этих данных. И другим объектам предоставляет только то что необходимо. И вся логика такой работы в том, что объекты обмениваются между собой "сигналами".

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

Спустя 3 минуты, 19 секунд (14.11.2009 - 16:44) Krevedko написал(а):
Да, я знаю. Читал про пространства имен у Котерова. Кстати очень понятно там написано, что это и зачем оно надо (в прицнипе тоже и написано. что ты написал), я уже было обрадовался, но потом все как-то стало сложно и непонятно и я перешел к практике blink.gif

Спустя 1 месяц, 15 дней, 22 часа, 20 минут, 38 секунд (30.12.2009 - 15:04) isqad написал(а):
Здравствуйте, объясните новичку в ООП:


вот пример класса:

class hello extends user
{
function __construct() {}

function add($userid)
{
if(parent::issetuser($userid)) echo 'user is set!';
}
}


у меня есть пару вопросов:

1. parent - это обращение к родительскому классу?
2. Как кроме parent можно обратиться к методу родителя?
3. при создании экземпляра класса hello и применении метода add() экземпляр родительского класса будет создаваться автоматически??



Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.