[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: При написании програм с исп-ем классов
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;
}
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,'&nbsp').' | '.$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 написал(а):
Вот так попробуй переписать
Свернутый текст
<?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,'&nbsp').' | '.$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 написал(а):
Вложеные функции допустимы, с точки зрения культуры я имею ввиду? Т.к. вроди все работает если сначала объявлять.
Про замыкание еще не читал, ша почитаю... но можно сказать что чтото из этого лучше (вложенная или замыкание)

Спустя 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,'&nbsp').' | '.$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,'&nbsp').' | '.$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 спасибо.
Быстрый ответ:

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