<?php
class ClassListMail{
protected $db_table; #Таблица с email адресами рассылки
#Конструктор
function __construct(){
$this->db_table = 'z1_listmail';
}
#Добавить E-mail из txt файла в базу данных
function DBTextInMySql($path){
$table = $this->db_table;
if(file_exists($path) && is_file($path)){
echo 'Добавить E-mail в БД. Путь '.$path.'<br />';
DBTextFileInMySql($path, $table);
}elseif(file_exists($path) && is_dir($path)){
echo 'Добавить E-mail в БД. Путь '.$path.'<br />';
foreach(glob($path.'/*.txt') as $path){
DBTextFileInMySql($path, $table);
}
}else{
echo 'Файл или каталог по указанному пути не найден. Путь: '.$path;
}
function DBTextFileInMySql($path, $table){
if(($db_email = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)) !== null){
foreach($db_email as $key => $val){
if(filter_var(trim($val), FILTER_VALIDATE_EMAIL)){
$query = "SELECT `id`, `email` FROM `".$table."` WHERE `email`='".mysql_real_escape_string(trim($val))."' LIMIT 1";
$sql = mysql_query($query) or die('Error!');
if(mysql_num_rows($sql) > 0){
$sqlrow = mysql_fetch_array($sql);
echo 'Такой E-mail уже есть в базе: '.str_pad($sqlrow['id'],6,' ').' | '.$sqlrow['email'].'<br />';
}else{
$query = "INSERT INTO `".$table."` SET `email`='".mysql_real_escape_string(trim($val))."'";
mysql_query($query) or die('Error!');
}
}
}
$key = !empty($key) ? $key : '0';
echo 'Обработано '.$key.' строк. Файл '.$path.'<br />';
}else{
echo 'Функция file() возвращает FALSE при попытке занесения информации из текстового файла в БД. Файл: '.$path.'<br />';
}
}
}
}
?>
Так не работает если функцию в методе объявить раньше использования то работает. function DBTextFileInMySql($path, $table)
Спустя 1 минута, 31 секунда (29.01.2012 - 20:01) Winston написал(а):
Дык ты же определил ф-ю внутри метода, а это уже не замыкание, а вложенная ф-я
Спустя 1 минута, 37 секунд Winston написал(а):
Вот так попробуй переписать
Спустя 1 минута, 37 секунд Winston написал(а):
Вот так попробуй переписать
Свернутый текст
<?php
class ClassListMail{
protected $db_table; #Таблица с email адресами рассылки
#Конструктор
function __construct(){
$this->db_table = 'z1_listmail';
}
#Добавить E-mail из txt файла в базу данных
function DBTextInMySql($path){
$DBTextFileInMySql = function($path, $table){
if(($db_email = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)) !== null){
foreach($db_email as $key => $val){
if(filter_var(trim($val), FILTER_VALIDATE_EMAIL)){
$query = "SELECT `id`, `email` FROM `".$table."` WHERE `email`='".mysql_real_escape_string(trim($val))."' LIMIT 1";
$sql = mysql_query($query) or die('Error!');
if(mysql_num_rows($sql) > 0){
$sqlrow = mysql_fetch_array($sql);
echo 'Такой E-mail уже есть в базе: '.str_pad($sqlrow['id'],6,' ').' | '.$sqlrow['email'].'<br />';
}else{
$query = "INSERT INTO `".$table."` SET `email`='".mysql_real_escape_string(trim($val))."'";
mysql_query($query) or die('Error!');
}
}
}
$key = !empty($key) ? $key : '0';
echo 'Обработано '.$key.' строк. Файл '.$path.'<br />';
}else{
echo 'Функция file() возвращает FALSE при попытке занесения информации из текстового файла в БД. Файл: '.$path.'<br />';
}
};
$table = $this->db_table;
if(file_exists($path) && is_file($path)){
echo 'Добавить E-mail в БД. Путь '.$path.'<br />';
$DBTextFileInMySql($path, $table);
}elseif(file_exists($path) && is_dir($path)){
echo 'Добавить E-mail в БД. Путь '.$path.'<br />';
foreach(glob($path.'/*.txt') as $path){
$DBTextFileInMySql($path, $table);
}
}else{
echo 'Файл или каталог по указанному пути не найден. Путь: '.$path;
}
}
}
?>
Спустя 8 минут, 50 секунд (29.01.2012 - 20:10) Xes написал(а):
Тобишь $ поставили перед функцией?
Чето на неожиданные скобки ругается {
Спустя 1 минута, 26 секунд Xes написал(а):
Вложеные функции допустимы, с точки зрения культуры я имею ввиду? Т.к. вроди все работает если сначала объявлять.
Про замыкание еще не читал, ша почитаю... но можно сказать что чтото из этого лучше (вложенная или замыкание)
Чето на неожиданные скобки ругается {
Спустя 1 минута, 26 секунд Xes написал(а):
Вложеные функции допустимы, с точки зрения культуры я имею ввиду? Т.к. вроди все работает если сначала объявлять.
Про замыкание еще не читал, ша почитаю... но можно сказать что чтото из этого лучше (вложенная или замыкание)
Спустя 3 минуты, 43 секунды (29.01.2012 - 20:14) Winston написал(а):
Цитата (Xes @ 29.01.2012 - 19:10) |
Чето на неожиданные скобки ругается { |
Значит у тебя наверное PHP < 5.3
Тогда сделай вложенную ф-ю, как ты делал, только вначале её объяви, чтобы работала.
Просто по твоим сообщениям в СМС, все подумали, что ты спрашиваешь можно ли вызывать метод внутри другого метода, до его объявления.
Спустя 1 минута, 40 секунд Winston написал(а):
А, это я тупанул, нужно ; ставить после замыкания, то есть так
Свернутый текст
$DBTextFileInMySql = function($path, $table){
if(($db_email = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)) !== null){
foreach($db_email as $key => $val){
if(filter_var(trim($val), FILTER_VALIDATE_EMAIL)){
$query = "SELECT `id`, `email` FROM `".$table."` WHERE `email`='".mysql_real_escape_string(trim($val))."' LIMIT 1";
$sql = mysql_query($query) or die('Error!');
if(mysql_num_rows($sql) > 0){
$sqlrow = mysql_fetch_array($sql);
echo 'Такой E-mail уже есть в базе: '.str_pad($sqlrow['id'],6,' ').' | '.$sqlrow['email'].'<br />';
}else{
$query = "INSERT INTO `".$table."` SET `email`='".mysql_real_escape_string(trim($val))."'";
mysql_query($query) or die('Error!');
}
}
}
$key = !empty($key) ? $key : '0';
echo 'Обработано '.$key.' строк. Файл '.$path.'<br />';
}else{
echo 'Функция file() возвращает FALSE при попытке занесения информации из текстового файла в БД. Файл: '.$path.'<br />';
}
};
Спустя 9 минут, 9 секунд (29.01.2012 - 20:23) Xes написал(а):
Свернутый текст
<?php
class ClassListMail{
protected $db_table; #Таблица с email адресами рассылки
#Конструктор
function __construct(){
$this->db_table = 'z1_listmail';
}
#Добавить E-mail из txt файла в базу данных
function DBTextInMySql($path){
$table = $this->db_table;
if(file_exists($path) && is_file($path)){
echo 'Добавить E-mail в БД. Путь '.$path.'<br />';
$DBTextFileInMySql($path, $table);
}elseif(file_exists($path) && is_dir($path)){
echo 'Добавить E-mail в БД. Путь '.$path.'<br />';
foreach(glob($path.'/*.txt') as $path){
$DBTextFileInMySql($path, $table);
}
}else{
echo 'Файл или каталог по указанному пути не найден. Путь: '.$path;
}
$DBTextFileInMySql = function($path, $table){
if(($db_email = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)) !== null){
foreach($db_email as $key => $val){
if(filter_var(trim($val), FILTER_VALIDATE_EMAIL)){
$query = "SELECT `id`, `email` FROM `".$table."` WHERE `email`='".mysql_real_escape_string(trim($val))."' LIMIT 1";
$sql = mysql_query($query) or die('Error!');
if(mysql_num_rows($sql) > 0){
$sqlrow = mysql_fetch_array($sql);
echo 'Такой E-mail уже есть в базе: '.str_pad($sqlrow['id'],6,' ').' | '.$sqlrow['email'].'<br />';
}else{
$query = "INSERT INTO `".$table."` SET `email`='".mysql_real_escape_string(trim($val))."'";
mysql_query($query) or die('Error!');
}
}
}
$key = !empty($key) ? $key : '0';
echo 'Обработано '.$key.' строк. Файл '.$path.'<br />';
}else{
echo 'Функция file() возвращает FALSE при попытке занесения информации из текстового файла в БД. Файл: '.$path.'<br />';
}
};
}
}
?>
Страннинько вроди php 5.3.3 а ругается тк
Цитата |
Notice: Undefined variable: DBTextFileInMySql in Z:\home\test1.ru\www\module\listmail\class_listmail.php on line 13 [Денвер: показать возможную причину ошибки] Fatal error: Function name must be a string in Z:\home\test1.ru\www\module\listmail\class_listmail.php on line 13 |
Спустя 5 минут, 49 секунд (29.01.2012 - 20:29) Winston написал(а):
Пропиши замыкание вначале метода.
Спустя 2 минуты, 32 секунды (29.01.2012 - 20:31) Rand написал(а):
Цитата (Xes @ 29.01.2012 - 23:10) |
Вложеные функции допустимы, с точки зрения культуры я имею ввиду? |
C точки зрения южно-азиатской культуры вполне допустимы :D Однако, при повторном вызове метода возникнет ошибка, т.к. функция уже была объявлена.
class A{
function foo() {
function bar() {
echo 'foo';
}
bar();
}
}
$a = new A;
$a->foo();
$a->foo();
Спустя 3 минуты, 50 секунд (29.01.2012 - 20:35) Xes написал(а):
Да так работает.
Winston,Rand спасибо.
Winston,Rand спасибо.