[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обращение к свойству класса из анонимной функции
Xes
Есть ли способ красиво обратится из ананимной функции к свойству класса, изменить его. Кроме как передать это свойство по ссылке (&) в анонимную функцию, лучшего способа не знаю.
Свернутый текст

#Импорт E-mail из txt файла в базу данных
function ImportEmail($path = null){
$this->import_err = null;
$ImportText = function($path, $table, &$err){ // <<<<==== ТУТ!!!!!!!!!!
if(($db_email = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)) !== null){
$mysql_db_email = array();
$query = "SELECT `email` FROM `".$table."`";
$sql = mysql_query($query) or die('Error!');
if(mysql_num_rows($sql) > 0){
while($sqlrow = mysql_fetch_array($sql)){
$mysql_db_email[] = $sqlrow['email'];
}
}

foreach($db_email as $key => $val){
if(filter_var(trim($val), FILTER_VALIDATE_EMAIL) && !in_array(trim($val), $mysql_db_email)){
$mysql_db_email[] = trim($val);
$query = "INSERT INTO `".$table."` SET `email`='".mysql_real_escape_string(trim($val))."'";
mysql_query($query) or die('Error!');
}else{
$err .= 'Bad E-mail: '.trim($val).'<br />';
}
}

$key = !empty($key) ? $key : '0';
$err .= '<span style="display:block;font-weight:bold;color:#FF5555;">Обработано '.$key.' строк. Файл '.$path.'</span>';
}else{
$err .= '<span style="display:block;font-weight:bold;color:#FF5555;">Функция file() возвращает FALSE при попытке чтения файла. Файл: '.$path.'</span>';
}
}
;
$path = $path ? $path : $this->import_path;
if(file_exists($path) && is_file($path)){
$this->import_err .= '<span style="display:block;font-weight:bold;color:#FF3333;">Импорт E-mail в БД из файла '.$path.'</span>';
$ImportText($path, $this->db_table, $this->import_err); // <<<<==== ТУТ!!!!!!!!
}elseif(file_exists($path) && is_dir($path)){
$arr_path = glob($path.'/*.txt');
$this->import_err .= '<span style="display:block;font-weight:bold;color:#FF3333;">Импорт E-mail в БД из каталога '.$path.'</span>';
$this->import_err .= '<span style="display:block;font-weight:bold;color:#FF5555;">Найдено файлов "*.txt" для экспорта ['.count($arr_path).']</span>';
foreach($arr_path as $path){
$ImportText($path, $this->db_table, $this->import_err);
}
}
else{
$this->import_err .= '<span style="display:block;font-weight:bold;color:#000;">Файл или каталог по указанному пути не найден. Путь: '.$path.'</span>';
}
}




Спустя 12 минут, 17 секунд (30.01.2012 - 22:25) Winston написал(а):
Через указатель $this не пробовал?

Спустя 1 минута, 36 секунд (30.01.2012 - 22:26) Игорь_Vasinsky написал(а):
и то что присутствуют и запросы SQL и вёрстка - ни есть гуд.

Спустя 12 часов, 43 минуты (31.01.2012 - 11:09) Xes написал(а):
Цитата (Winston @ 30.01.2012 - 19:25)
Через указатель $this не пробовал?

В первую очередь так и пробовал но не работает. Говрит чтото типа не знает что такое $this, видемо он не видет это указатель, поэтому и переделал через ссылку.
$this->import_err .= 'Bad E-mail: '.trim($val).'<br />';

Цитата (Игорь_Vasinsky @ 30.01.2012 - 19:26)
и то что присутствуют и запросы SQL и вёрстка - ни есть гуд.

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

Спустя 3 минуты, 51 секунда (31.01.2012 - 11:13) Winston написал(а):
А так попробовать?
$ImportText = function($path, $table, &$this){
$this->свойство;
....

}

Вызов
$ImportText($path, $this->db_table, $this);

Спустя 5 минут, 19 секунд (31.01.2012 - 11:19) Xes написал(а):
Ну да впринцыпе должно работать, почти тоже самое, просто не само свойстов, а весь объет по ссылки передадим.
Видимо так оно и должно быть... по ссылке...
Я думал может есть еще чтото, что я езще не успел прочитать что можно напрямую в свойство передать значение из безыменной функции.

Спустя 14 минут, 46 секунд (31.01.2012 - 11:33) Winston написал(а):
Не. Так пахать не будет. Только что проверил.

Спустя 4 минуты, 53 секунды (31.01.2012 - 11:38) Winston написал(а):
Можно просто делать в анонимной ф-и return $err;
$ImportText = function($path, $table){

А при вызове писать
$this->import_err .= $ImportText($path, $this->db_table);

Спустя 1 день, 7 часов, 48 минут, 59 секунд (2.02.2012 - 19:27) Xes написал(а):
На серваке пхп 5.2, анонимные функции не работают, чем заменит?
Я анонимную функию вынес из метода, и преврантил ее в отдельный метод класса, что то лучше есть, или это оптимальный выход в этом случае.

Спустя 2 часа, 51 минута, 8 секунд (2.02.2012 - 22:18) Winston написал(а):
Цитата (Xes @ 2.02.2012 - 18:27)
На серваке пхп 5.2, анонимные функции не работают, чем заменит?

Напиши приватный (private) метод для выполнения однотипного действия.

Спустя 5 минут, 35 секунд (2.02.2012 - 22:24) neadekvat написал(а):
Цитата (Winston @ 2.02.2012 - 23:18)
приватный

По-русски это звучит как "частный" или "закрытый".
Быстрый ответ:

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