PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (3): [1] 2 3 »
Найдено сообщений: 41
Alex_pac
Отправлено: 30 Августа, 2013 - 08:44:46 • Тема: Порядок в классах • Форум: Объектно-ориентированное программирование
Ответов: 10 Просмотров: 1702
Цитата: это не просто пачка (библиотека) функций
как раз таки, некоторые классы, например класс для БД являются имеено такими пачками, и желательно их функции вынести в .h для понимания их работы
или, на худой конец, описать интерфейс, в виде абстрактного класса, в начале файла
Alex_pac
Отправлено: 30 Августа, 2013 - 08:28:03 • Тема: Порядок в классах • Форум: Объектно-ориентированное программирование
Ответов: 10 Просмотров: 1702
Цитата: Ёксель-моксель.. Это же пхп. Чего от него хотеть невозможного?
то-то я смотрю все более менее нормальные веб приложения используют опп а не глобальные функции. Так что это не невозможно.
Я взял пример с большим классом что бы показать, что наличие хедера для него разгружает его код.
Alex_pac
Отправлено: 30 Августа, 2013 - 02:13:52 • Тема: Порядок в классах • Форум: Объектно-ориентированное программирование
Ответов: 10 Просмотров: 1702
Цитата: любая приличная IDE позволяет если не просмотреть структуру класса в отдельном окне то как минимум свернуть все методы
то есть на уровне синтаксиса кода класса это не решается вообще?
Например открыть класс не в IDE вообще никак?
(Добавление)
пишу только о том что мне известно и с чем я работал
(Добавление)
как вариант использовать абстрактный класс в качестве подобия хедера.
или применить файлу заголовку расширение .h
helloclass.h
helloclass.php
PHP:
скопировать код в буфер обмена
<?PHP
include_once 'helloclass.h' ;
class helloclass extends header_helloclass {
public function prototypefunction( $z ) {
echo $this -> zz . $z ;
}
} // end class
Alex_pac
Отправлено: 30 Августа, 2013 - 00:31:42 • Тема: Порядок в классах • Форум: Объектно-ориентированное программирование
Ответов: 10 Просмотров: 1702
представим что у нас есть большой класс на 50 методов и 25 переменных
каждый метод по 100 строк + 25 строки переменных
итого 50*100+25 + межстрочные инвервалы (50+25)*2 = 5175 строк кода
нехило так, очень сложно наверно "прочитать" такой класс
просмотрим как с такими полотнами работают в других языках программирования
1) с++
есть .h файл который сам описывает видимую и также невидимую структуру класса
(50+25) *2 = 150 строк (как приятно видеть)
2) delphi
любой класс делится на 2 раздела
interface
implementation
и разгрузка идет похожим на с++ образом. Весь заголовок класса пишется сверху а логика работы снизу. Правда все в одном файле + помогает сама IDE в нагивации по этому полотну.
---
напрашивается вопрос какими средствами в php можно просмотреть просто названия методов класса?
и не только посмотреть а как скопировать их оттуда например?
или придется писать сверху в комментариях какая у файла структура?
Alex_pac
Отправлено: 18 Августа, 2013 - 18:18:17 • Тема: Рекурсивые регулярные выражения • Форум: Регулярные выражения
Ответов: 4 Просмотров: 561
PHP:
скопировать код в буфер обмена
<?PHP
$input = "верх [indent] глубже [indent] еще глубже [/indent] глубже [/indent] верх" ;
function parseTagsRecursive( $input )
{
$regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#' ;
$input = '<div style="margin-left: 10px">' . $input [ 1 ] . '</div>' ;
}
}
$output = parseTagsRecursive( $input ) ;
echo $output ;
?>
изволю не согласиться
данный код имеет некоторые недостатки:
1) требуется внутри функции указывать каким именно образом идет замена, в то время как у preg_replace_recursive идет простая передача через параметр
2) не допускается количество аргументов более одного
Alex_pac
Отправлено: 18 Августа, 2013 - 15:00:31 • Тема: Рекурсивые регулярные выражения • Форум: Регулярные выражения
Ответов: 4 Просмотров: 561
Подниму проблему написания bbcode парсера
Введение:
Итак написать парсер не составляет ничего сложного
пример кода
парсер
CODE (
htmlphp ):
скопировать код в буфер обмена
<? php
class bbcodeSimple {
// массив стандартных тегов
static $bb = array ( # x5 столбцов # Флаги #первый тег #между тегами #закрывающий #Замена
'si' , 'b' , '(.+)' , '/b' , '<b>$1</b>' ,
'si' , 'u' , '(.+)' , '/u' , '<u>$1</u>' ,
'si' , 'i' , '(.+)' , '/i' , '<i>$1</i>' ,
) ;
// функция парсер
function parse( $text ) {
for ( $i = 0 ; $i < count( self:: $bb ) ; $i += 5) {
$text = preg_replace ( '#\[' . self:: $bb [ $i + 1 ] . '\]' . self:: $bb [ $i + 2 ] . '\[' . self:: $bb [ $i + 3 ] . '\]#' . self:: $bb [ $i ] , self:: $bb [ $i + 4] , $text ) ; }
// чистка неверных тегов
return $text ;
}
} // end class
$text = '[b]hello world[/b] [i]привет[/i]' ;
echo bbcodeSimple:: parse ( $text ) ;
Результат работы кода:
Цитата: <b>hello world</b> <i>привет</i>
САБЖ:
Теперь вернемся к теме и попробуем распарсить вот такой bbcode :
Результат работы кода:
Цитата: <b>helloпривет world</b>
Неправильно! Парсер не смог справиться с задачей!
Верный вариант должен быть вот таким:
Цитата: <b>hello<b>привет</b> world</b>
Ошибка в работе произошла по вине функции preg_replace которая не умеет разбирать вложенные выражения
напишем функцию которая умеет разбирать вложенные выражения
PHP:
скопировать код в буфер обмена
function preg_replace_recursive( $pattern , $replace , $subject ) {
$c = 1 ;
$ret = $subject ;
while ( $c > 0) {
}
return $ret ;
}
Перепишем класс bbcodeSimple с новой функцией рекурсивного разбора выражений
PHP:
скопировать код в буфер обмена
<?PHP
function preg_replace_recursive( $pattern , $replace , $subject ) {
$c = 1 ;
$ret = $subject ;
while ( $c > 0) {
}
return $ret ;
}
class bbcodeSimple {
// массив стандартных тегов
static
$bb = array ( # x5 столбцов # Флаги #первый тег #между тегами #закрывающий #Замена
'si' , 'b' , '(.+)' , '/b' , '<b>$1</b>' ,
'si' , 'u' , '(.+)' , '/u' , '<u>$1</u>' ,
'si' , 'i' , '(.+)' , '/i' , '<i>$1</i>' ,
) ;
// функция парсер
function parse( $text ) {
for ( $i = 0 ; $i < count( self :: $bb ) ; $i += 5 ) {
// << новая функция
$text = preg_replace_recursive( '#\[' . self :: $bb [ $i + 1 ] . '\]' . self :: $bb [ $i + 2 ] . '\[' . self :: $bb [ $i + 3 ] . '\]#' . self :: $bb [ $i ] , self :: $bb [ $i + 4] , $text ) ;
}
// чистка неверных тегов
return $text ;
}
} // end class
$text = '[b]hello[b]привет[/b] world[/b]' ;
echo bbcodeSimple:: parse ( $text ) ;
результат:
Цитата: <b>hello<b>привет</b> world</b>
Вывод:
Функция preg_replace_recursive теперь позволяет написать bbcode парсер на чистых регуляках, без написания классов "конечных автоматов" и прочих тяжеловесных абстракций
Также теперь доступен разбор вложенных тегов, как например теги цитат, используя этот же самый метод
Alex_pac
Отправлено: 06 Августа, 2013 - 10:10:50 • Тема: Каркас php роутера • Форум: HTTP и PHP
Ответов: 3 Просмотров: 1541
ок, "стандартное требование для работы принудительного перенаправления на фронт контроллер веб приложения"
буду знать
Alex_pac
Отправлено: 06 Августа, 2013 - 07:41:36 • Тема: Каркас php роутера • Форум: HTTP и PHP
Ответов: 3 Просмотров: 1541
Представляю на обозрение простейший каркас роутера
код .htaccess
CODE (
htmlphp ):
скопировать код в буфер обмена
RewriteEngine on
RewriteCond % { REQUEST_URI} ! ^.* \. ( html| jpg| png| css| gif| js| zip| rar| txt) $ [ NC]
RewriteRule ^( .* ) $ index. php
таким образом все запросы, кроме запросов на файлы, сливаются на index.php
который будет их впоследствии обрабатывать через $_SERVER['REQUEST_URI'];
какими правилами можно еще дополнить .htaccess файл?
Alex_pac
Отправлено: 20 Мая, 2011 - 07:53:18 • Тема: PHP Warning: mysql_fetch_assoc(): supplied argument • Форум: Если скрипт не работает
Ответов: 4 Просмотров: 2145
проверьте запрос на наличие ошибок,
а также почитайте документацию или еще что, про ваш класс $this->db->query
подозреваю что там может быть не $q1['query']
у вас нет скобки которая закрывает цикл while
при выводе данных использовать mysql_real_escape_string полный бред
в вашем случае там должен стоять escape , ибо URL
Страниц (3): [1] 2 3 »
Powered by ExBB FM 1.0 RC1. InvisionExBB