Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП функция в функции, как вызвать? 
:(
    Опции темы
Logree
Дата 16.7.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



приблизительная структура...:
Код


class some_class{
 
 function ex1() {
   echo "<br>";
 }

 function ex2() {
   echo "<b>";

   function ex21() {
     echo "dfd";
   }

   echo "</b>";
 }
 
 function ex3() {
   echo "<br>";
 }
}

Внимание вопрос: как вызвать функцию function ex21()
если можно то всё расписать начиная с : $Obj = new some_class();
я пробывал так
Код

class some_class{
 
 function ex1() {
   echo "<br>";
 }

 function ex2() {
   echo "<b>";

   function ex21() {
     echo "dfd";
   }
   $this->ex21();

   echo "</b>";
 }
 
 function ex3() {
   echo "<br>";
 }
}
$obj =new some_class();
$obj->ex1();
$obj->ex2();
$obj->ex3();

но ничего не полчилось...

Это сообщение отредактировал(а) Logree - 16.7.2007, 16:33


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
vasac
Дата 16.7.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



В PHP нет вложенных функций. В вашем примере при вызове $this->ex2() будет создана глобальная ex21(). Соответственно, вызывается она просто, как ex21(), но выполняться она будет не в контексте объекта.
PM WWW   Вверх
Logree
Дата 16.7.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



так как написать так чтобы всё работало? 


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
Diesel Draft
Дата 16.7.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 876
Регистрация: 18.1.2005
Где: Lviv, Ukraine

Репутация: 1
Всего: 5



а что должно получиться


--------------------
НЕДОМА в маси 
PM MAIL WWW ICQ GTalk   Вверх
Logree
Дата 17.7.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



если из моего примера то на выходе 

Код
<b>dfd</b>


тоесть мне нужно чтобы функция ex21() выполнялась там же где и определена  в примере...

Это сообщение отредактировал(а) Logree - 17.7.2007, 09:55


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
vasac
Дата 17.7.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Код

print '<b>dfd</b>';

Так устроит? По-моему критериям соответствует. Или попробуете более внятно описать задачу?
PM WWW   Вверх
Logree
Дата 17.7.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



1 вот весь скипт... ну почти весь без include  файла///
комент в коде
Код

<?php
session_start();
include('main_exam.php');

 class registr extends main_page{
    public $year;
    public $moth;
    public $now;
    public $day;
    public $i;
    public $errors;
    protected $info;
    
    public function _construct() {
        $this->i = 0;
        $this->info = 0;
        $now = date("Y")-87;
    }

    //проверка входящих данных//    
    public function check_reg($inf) {
        if (isset($_POST['registr'])) {
            
            $this->info = $_POST['arr']; 
            
            //проверка login//            
            if (!preg_match('/\w{3,15}/i',$this->info['login'])) {
                $this->errors[] = 'login: только буквы латинского алфавита, цифры, знака _ длинна 3-15 символов.';
            }
            //проверка pass//
            if (!preg_match('/\w{6,15}/i',$this->info['pass'])) {
                $this->errors[] = 'password: только буквы латинского алфавита, цифры, знака _ длинна 6-15 символов.';
            }
            //проверка имени//
            if (!preg_match('/[a-zA-Zа-яА-Я0-9_]*/i',$this->info['name'])) {
                $this->errors[] = 'Имя: состоять только буквы латинского/русского алфавита, цифры, знака _.';
            }
            //проверка города//
            if (!preg_match('/[a-zA-Zа-яА-Я]*/i',$this->info['where'])) {
                $this->errors[] = 'Название города: только буквы латинского/русского алфавита';
            }
            //проверка mail//
            if (!preg_match('/^\w+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-]+$/i',$this->info['email'])) {
                $this->errors[] = 'Неверный e-mail';
            }
            //проверка icq//
            if (!preg_match('/^\d*{5-15}/i',$this->info['icq'])) {
                $this->errors[] = 'Неверный icq';
            }
            //проверка mail//
            if (!preg_match('/^(http:\/\/ | www)\.[a-zA-Z0-9\-\]+\.[a-zA-Z0-9\-\/\.]*$/i',$this->info['email'])) {
                $this->errors[] = 'Неверный url';
            }
            
        }
        if ($this->errors[0] != 0) {
            $_SESSION['sess_err'] = $this->errors;
            header("Location: registr.php");
            exit();
        }
    }

    public function page() { 
    
        
        echo "<table class='main'>
  <tr>
    <td>
        <!--Менюшка-->
        <table class='login'>
         <tr>
            <td class='search'><img src='img/search.gif'></td>
            <td>
                <form action='search.php' method='POST'>
                <table>
                 <tr>                   
                   <td><input type='text' name='login' size='20'></td>
                   <td><input type='image' src='img/submit.gif' class='submit'></td>                
                 </tr>
                </table>
                </form>
            </td>
            <td class='advens'>
                <form action='' method='POST'>
                <table align='right'>
                 <tr>
                   <td><img src='img/login.gif'></td>
                   <td><b>Login:</b></td>
                   <td><input type='text' name='login' size='15'></td>
                   <td><img src='img/pass.gif'></td>
                   <td><b>Password:</b></td>
                   <td><input type='password' name='psswd' size='15'></td>
                   <td><input type='image' src='img/submit.gif' class='submit'></td>
                 </tr>
                </table>                                  
                </form>
            </td>
            <td class='searchr'>&nbsp;</td>                   
         </tr>      
        </table>
        <!--/Менюшка-->     
    </td>
  </tr>
  <tr><td class='hilog'>Здравствуйте, <b>Гость</b>!</td></tr>
  <tr>
    <td>";
    
    if (empty($_SESSION['sess_err'])) {
        
        $this->errors = $_SESSION['sess_err'];
        echo "<table class='forum'><tr><td><ul>";
                   for ($this->i=0;$this->i <count($this->errors);$this->i++) {
        echo "<li>".$this->errors[$this->i]."</li>";
                }     
        echo "</ul></td></tr></table>";
    }
    
        echo "
         <table class='forum'>
           <tr>
             <td  class='path'>Регистрация |</td>
           </tr>
           <tr>
             <td>
                 <form method='POST' action=''>
                 <ul>
                   <li><b>Ник:</b> <input type='text' name='arr[login]' size='20'></li>
                   <li><b>Пароль:</b> <input type='text' name='arr[pass]' size='20'></li>
                   <li><b>Повторите пароль:</b> <input type='text' name='arr[pass]' size='20'></li>
                   <li><b>Имя:</b> <input type='text' name='arr[name]' size='20'></li>
                   <li><b>Дата рождения:</b>
                     <select>";
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* ВОТ ЭТОТ КУСОК(ниже) НУЖНО ЗАСУНУТЬ В ФУНКЦИЮ ЧТОБЫ ОКОЛО КАЖДОЙ ПЕРЕМЕННОЙ НЕ ПИСАТЬ $this->, а просто написать что-то на подобе :

function get_day($this->i,$this->day) {
    for($i=1;$i<32;$i++) {
    $day[$i] = $i;
    if (preg_match('/^\d$/',$day[$i])) {
        $day[$i] = "0".$day[$i];
    }
    echo "<option>".$day[$i]."</option>";
   }
}    



*/    
            
                         // получение дня//         
             for ($this->i=1;$this->i<32;$this->i++) {
                $this->day[$this->i] = $this->i;
                    if (preg_match('/^\d$/',$this->day[$this->i])) {
                        $this->day[$this->i] = "0".$this->day[$this->i];
                    }
                echo "<option>".$this->day[$this->i]."</option>";                
             }
             echo "</select><select>";                                                                                                                  //
             
             //получение месяца//
             for($this->i=1;$this->i<13;$this->i++) {
                  $this->moth[$this->i] = $this->i;
                    if (preg_match('/^\d$/',$this->moth[$this->i])) {
                        $this->moth[$this->i] = "0".$this->moth[$this->i];
                    }                                                                                                                                                    //
                  echo "<option>".$this->moth[$this->i]."</option>";
             } 
             echo "</select>";                                                                                                                         //

                                                                                                                                                                          //                
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////                    
                    
                    echo "</li>                   
                   <li><b>Откуда:</b> <input type='text' name='arr[where]' size='20'></li>
                   <li><b>E-mail:</b> <input type='text' name='arr[email]' size='20'></li>
                   <li><b>ICQ:</b> <input type='text' name='arr[icq]' size='20'></li>
                   <li><b>URL:</b> <input type='text' name='arr[url]' size='20'></li>
                 </ul>
                 <input type='submit' name='registr' value='регистрация'>
                 </form>
             </td>
           </tr>
                    
         </table>
         <table class='copyright'>
           <tr>
             
           </tr>
         </table>
    </td>
  </tr>
     </table>";}
}
$reg = new registr();
$reg->_construct();
$reg->check_reg($_POST['arr']);
$reg->head('mainpage','','css.css');
$reg->page();
$reg->down_f();

?>



2 что за ошибка ему чем-то не правится $_POST['arr']?
3 ну и когда я передаю массив arr через POST мне приходится делать так $this->info = $_POST['arr'] чтобы получить доступ к элементам массива есть ли способ проще?

Это сообщение отредактировал(а) Logree - 17.7.2007, 11:46


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
Mal Hack
Дата 17.7.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



А что мешает просто взять и написать: 
Код

echo "<b>sadasd</b>";
??
Зачем создавать внутреннюю локальную функцию?
PM ICQ   Вверх
Logree
Дата 17.7.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



вы читали код выше строка 134? я думаю что читали.... (чтобы сократить сам код и сделать его читабильней)....
но в принципе видимо  функцию page придётся просто разбить на функции...

и мнне так и ни кто не ответил на вопросы 2 и 3.. :-(

Это сообщение отредактировал(а) Logree - 17.7.2007, 22:24


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
Mal Hack
Дата 17.7.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Объявите обычную функцию (без этих изхитрений), передайте в нее все нужные параметры, которые идут через $this->i и верните результат в виде итоговой сгенерированной строки. Внутри функции работайте с локальными для нее параметрами, совершенно не касаясь свойств объекта.
Что касается второго вопроса, так это же двумерный массив, наверняка используете его как не двумерный вектор, а если говорит, что не знает такого, то проверяйте заполненность параметров тэга <form>
По третьему. Проще - использовать $_POST без внесения его в память выделяемую под создаваемый вами объект.

Это сообщение отредактировал(а) Mal Hack - 17.7.2007, 22:59
PM ICQ   Вверх
Logree
Дата 17.7.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



Цитата

Объявите обычную функцию (без этих изхитрений), передайте в нее все нужные параметры, которые идут через $this->i и верните результат в виде итоговой сгенерированной строки. Внутри функции работайте с локальными для нее параметрами, совершенно не касаясь свойств объекта.


по моему я это и делаю?
или я чего-то недопонял? если всё правильно то как и где её вызвать(№ строки)

Код

function get_day($this->i,$this->day) {
    for($i=1;$i<32;$i++) {
    $day[$i] = $i;
    if (preg_match('/^\d$/',$day[$i])) {
        $day[$i] = "0".$day[$i];
    }
    echo "<option>".$day[$i]."</option>";
   }
}   

второе дошло...


третье не понял... можно пояснить?...


заранее извеняюсь что такой тупой... тут ни чего не поделаешь...


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
Mal Hack
Дата 18.7.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Я имею ввиду что-то вроде:

Код

class
...
...
function one()
{
 print $s=$this->page($this->i, $this->cnt);
}

function page($i,$cnt)
{
 for($j=$i;$j<$cnt;$j++)
{$ret .= "... GENERY ... ";}

return $ret;
}


По третьему. Везде используйте $_POST никуда его дополнительно не записывая.
PM ICQ   Вверх
Logree
Дата 18.7.2007, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



огромное спасибо....


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0829 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.