PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (15): В начало « ... 7 8 9 10 11 12 13 14 [15]
Найдено сообщений: 224
Invert
Отправлено: 16 Декабря, 2010 - 04:48:24 • Тема: Помогите с switch • Форум: Программирование на PHP
Ответов: 4 Просмотров: 385
PHP:
скопировать код в буфер обмена
<?PHP
define ( 'BR' , "<br />\r \n " ) ;
echo "Число roll = " . $roll . BR;
switch ( $roll ) {
case 1:
$romValue = "1" ;
break ;
case 2:
$romValue = "II" ;
break ;
case 3:
$romValue = "III" ;
break ;
case 4:
$romValue = "IV" ;
break ;
case 5:
$romValue = "V" ;
break ;
case 6:
$romValue = "VI" ;
break ;
default :
print "you die" ;
}
echo H3s . "Бинарный код " . $romValue . H3e . BR;
?>
Invert
Отправлено: 14 Декабря, 2010 - 11:08:54 • Тема: PREG_MATCH и его функции, прошу объяснить • Форум: Программирование на PHP
Ответов: 11 Просмотров: 878
Регистронезависимость это отсутствие разницы между буквами в верхнем и нижнем регистре, т.е. А=а, б=Б. В вашем случае 0-9a-z, A-Z не нужно, стоит i.
Черточки это обозначение регулярки: /регулярка/.
По поводу жадности долго объяснять, вы бы почитали статьи, их много хороших.
И отчет начинается с 1, т.е. {2,5} это диапазон от 2-х до 5-ти.
Invert
Отправлено: 14 Декабря, 2010 - 10:03:52 • Тема: Ошибки в объекте • Форум: Программирование на PHP
Ответов: 7 Просмотров: 399
Спасибо, я все понимаю. =)
Вы представьте, что там не работа с ПОСТ\ГЕТ, а какие-то сложные вычисления - мне бы советы по философии ООП и структуре объектов.
Invert
Отправлено: 14 Декабря, 2010 - 09:51:16 • Тема: Движок для сайта на PHP • Форум: Программирование на PHP
Ответов: 23 Просмотров: 1512
Я с толкнулся с проблемой, когда ни одна из существующих ЦМС не подходит мне. Был вариант изучить Друпал, который дал бы 80% того, что хочется, но это минимум пол года времени на изучение. Да и сложности потом тоже будут: Создание шаблона, напильник для модулей и тд. Поэтому лучшим вариантом есть создание своего детища, под свои задачи.
Простую систему написать могу, но не хочу. Сложную хочу, но пока не могу.
Создание собственного движка, с качественной структурой и модульностью, очень сложная задача, поэтому нужно тщательно готовиться. Пока изучаю информацию и чужие грабли.
Invert
Отправлено: 14 Декабря, 2010 - 09:34:57 • Тема: Файлы, Мускуль и Мемкеш • Форум: Прочее
Ответов: 7 Просмотров: 66
Если я все правильно понял и ничего не путаю - мемкеш имеет такую штуку, как промахи, посему некоторые товарищи не рекомендуют в мемкеше хранить важную информацию.
Есть некоторые примеры реализации кэширования отдельных запросов к БД, для ускорения работы ЦМС.
Для меня непонятно как именно делать выборку отдельных записей с БД, которая прокэширована в мемкеш. Для этого видимо придется создать инструментарий, который, как мне кажется, будет работать медленнее, чем выборка с БД.
На мой взгляд мемкеш отличное решение для кэширования горячих, сложных запросов к БД. Или, как вариант, для кэширования изображений в момент большого кол-ва запросов - облегчим работу винту/винтам.
Мемкешем не пользовался, но планирую в ближайшее время. Недавно читал статьи, кстати на Хабре много чего хорошего написано.
Invert
Отправлено: 14 Декабря, 2010 - 09:10:23 • Тема: Ошибки в объекте • Форум: Программирование на PHP
Ответов: 7 Просмотров: 399
Здравствуйте.
Совсем недавно начал изучение ОО, поэтому некоторые нюансы мне непонятны. Также могу допускать грубые ошибки.
Необходима ваша консультация и критика: в нужном ли я направлении движусь? Какие ошибки допускаю? Что делать нужно, а что нет?
Для практики поставил себе задачу создать объект чтения и проверки GET и POST данных. Старался делать хорошо и гибко.
Вот что получилось:
PHP:
скопировать код в буфер обмена
// Извлечение и проверка _GET и _POST данных :::::::::::::::
// 14.12.2010 Версия: 1.0.20 ::::::::::::::::::::::::::::::
/*
bool:результат = SetParameters ( array:имя_переменной=>метод_доступа ) - Установка имен параметров и методов, получение данных по параметрам
bool:результат = CheckData ( int:тип_проверки ) - Проверка данных.
SET_ONE - Установлен хоть один параметр? Вернет TRUE если это так.
SET_ALL - Установлены все параметры? Вернет TRUE если это так.
FULL_ONE - Хоть один параметр имеет данные? Вернет TRUE если это так.
FULL_ALL - Все параметры имеют данные? Вернет TRUE если это так.
array:данные = GetData () - Возврат ассоциативного массива с данными.
Clear () - Очистка данных обьекта.
Destroy () - Уничтожение обьекта.
*/
class GetPostProcessing {
// Параметры
const _GET = 'g' ;
const _POST = 'p' ;
const SET_ONE = 1 ;
const SET_ALL = 2 ;
const FULL_ONE = 3 ;
const FULL_ALL = 4 ;
//
private $Data ;
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Конструктор - установка параметров при инициализации
function __construct ( $paramlist = FALSE ) {
// Проверка наличия данных
if ( $paramlist != FALSE ) {
// Установка параметров
$this -> SetParameters ( $paramlist ) ;
}
}
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Установка параметров
public function SetParameters ( $paramlist = FALSE ) {
$result = FALSE ;
// Проверяем массив ли
// Это массив
foreach ( $paramlist as $name => $method ) {
// Проверяем формат каждого параметра
$result = TRUE ;
// Вызываем метод чтения данных
$this -> Data [ $name ] = $this -> _ReadData ( $name , $method ) ;
} else {
// Ошибка формата параметра
$this -> Data [ $name ] = FALSE ;
}
}
}
return $result ;
}
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Проверка данных
public function CheckData ( $type = FALSE ) {
// Считаем кол-во элементов массива, проверяем
if ( $list_count = count ( $this -> Data ) ) { // Определяем тип проверки
switch ( $type ) {
case self :: SET_ONE :
// Проверка отсутствия любого параметра
$check = 0 ;
foreach ( $this -> Data as $name => $content ) {
// Пошаговая проверка
if ( $content !== NULL ) {
// Параметр есть
$check ++;
}
}
// Контрольная проверка
if ( $check >= 1 ) {
// Нет отсутствующих параметров
$result = TRUE ;
} else {
// Есть отсутствующие
$result = FALSE ;
}
break ;
case self :: SET_ALL :
// Проверка отсутствия всех параметров
$check = 0 ;
foreach ( $this -> Data as $name => $content ) {
// Пошаговая проверка
if ( $content !== NULL ) {
// Параметр есть
$check ++;
}
}
// Контрольная проверка
if ( $list_count == $check ) {
// Хоть один параметр есть
$result = TRUE ;
} else {
// Все параметры отсутствуют
$result = FALSE ;
}
break ;
case self :: FULL_ONE :
// Проверка на "пустоту" любого параметра
$check = 0 ;
foreach ( $this -> Data as $name => $content ) {
// Пошаговая проверка
if ( ( $content != '' ) and ( $content !== NULL ) ) {
// Параметр не пустой
$check ++;
}
}
// Контрольная проверка
if ( $check >= 1 ) {
// Нет пустых параметров
$result = TRUE ;
} else {
// Есть пустые
$result = FALSE ;
}
break ;
case self :: FULL_ALL :
// Проверка на "пустоту" всех параметров
$check = 0 ;
foreach ( $this -> Data as $name => $content ) {
// Пошаговая проверка
if ( ( $content != '' ) and ( $content !== NULL ) ) {
// Параметр не пустой
$check ++;
}
}
// Контрольная проверка
if ( $list_count == $check ) {
// Хоть один параметр не пустой
$result = TRUE ;
} else {
// Все параметры пустые
$result = FALSE ;
}
break ;
default :
// Ошибка типа проверки
$result = FALSE ;
}
} else {
// Ошибка, нет данных
$result = FALSE ;
}
return $result ;
}
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Возврат данных
public function GetData ( ) {
// Извлекаем данные
$result = $this -> Data ;
return $result ;
}
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Очистка обьекта
public function Clear ( ) {
$this -> Data = FALSE ;
}
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Уничтожение обьекта
public function Destroy ( ) {
}
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Чтение данных
private function _ReadData ( $name , $method ) {
// Определяем метод доступа
switch ( $method ) {
case self :: _GET:
// Получаем данные
$result = $_GET [ $name ] ;
break ;
case self :: _POST:
// Получаем данные
$result = $_POST [ $name ] ;
break ;
default :
// Ошибка метода
$result = FALSE ;
}
return $result ;
}
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::
}
И работа с объектом:
PHP:
скопировать код в буфер обмена
// Инициализация и извлечение данных
$gpp = new GetPostProcessing
( array ( 'get_prm_name' => GetPostProcessing
:: _GET
, 'post_prm_name' => GetPostProcessing
:: _POST
) ) ; // Отдельно: извлечение данных
$gpp -> SetParameters ( array ( 'get_prm_name' => GetPostProcessing
:: _GET
, 'post_prm_name' => GetPostProcessing
:: _POST
) ) ; // Проверка данных
if ( $gpp -> CheckData ( GetPostProcessing:: SET_ALL ) ) echo "Установлены все параметры! <br />" ;
if ( $gpp -> CheckData ( GetPostProcessing:: SET_ONE ) ) echo "Установлен хоть один параметр! <br />" ;
if ( $gpp -> CheckData ( GetPostProcessing:: FULL_ALL ) ) echo "Все параметры содержат данные! <br />" ;
if ( $gpp -> CheckData ( GetPostProcessing:: FULL_ONE ) ) echo "Хоть один параметр содержит данные! <br />" ;
// Получаем данные
$GetPostData = $gpp -> GetData ( ) ;
// Очищаем обьект, если нужно.
$gpp -> Clear ( ) ;
// Удаляем обьект
$gpp -> Destroy ( ) ;
Заранее спасибо за помощь!
Invert
Отправлено: 13 Декабря, 2010 - 05:49:09 • Тема: Быстродействие класса. • Форум: Программирование на PHP
Ответов: 18 Просмотров: 1430
Спасибо за спор, кое-что полезное для себя вычитал.
К сожалению я ничего так и не тестировал, руки не доходят. Но сделал для себя вывод: это не то место, где нужно экономить. Повысить производительность можно многими способами (кэширование и пр.), более важной является задача создать качественные многоразовые объекты, которые в будущем мне сэкономят время и нервы.
ПС. Я только недавно начал переход на ОО, ранее использовал только процедурный метод.
Invert
Отправлено: 24 Ноября, 2010 - 19:18:27 • Тема: Быстродействие класса. • Форум: Программирование на PHP
Ответов: 18 Просмотров: 1430
Спасибо, но хотелось бы больше конкретики. Думаю провести небольшое тестирование и показать сюда результат, если кому-то интересно.
Invert
Отправлено: 24 Ноября, 2010 - 13:18:12 • Тема: Быстродействие класса. • Форум: Программирование на PHP
Ответов: 18 Просмотров: 1430
Добрый день ув. пользователи.
Нужна ваша помощь в решении вопроса быстродействия класса.
Допустим есть объект:
PHP:
скопировать код в буфер обмена
class Object {
public function SetA ( $prmA ) {
... проверка и установка настроек объекта ...
}
public function SetB ( $prmB ) {
... проверка и установка настроек объекта ...
}
public function SetC ( $prmC ) {
... проверка и установка настроек объекта ...
}
...
}
PHP:
скопировать код в буфер обмена
$obj = new Object;
// Установка параметров объекта
// Классически задаются через отдельные методы, каждый параметр проверяется на правильность, параметры сохраняются во внутренних переменных объекта.
$obj -> SetA ( $prm_a ) ;
$obj -> SetB ( $prm_b ) ;
$obj -> SetC ( $prm_c ) ;
// Потом обрабатываем данные на основе заданных параметров
$obj -> SomeFunc ( $x ) ;
// Удаляем объект
$obj -> Free ( ) ;
Сам скрипт обрабатывает некоторые файлы с винта, некоторые сжимает и кэширует в отдельную директорию. Сайт посещаемый, ожидаемое кол-во запросов к скрипту от 10 до 50 в секунду. Вопрос стоит в быстродействии скрипта.
Была мысль задавать все параметры внутри объекта константами, максимально уменьшив кол-во всяких проверок и методов. Пример ниже:
PHP:
скопировать код в буфер обмена
class Object {
// Вместо методов установки и проверки парамеров задаем константы
const PRM_A = 'prm_a' ;
const PRM_A = 'prm_a' ;
const PRM_A = 'prm_a' ;
...
}
PHP:
скопировать код в буфер обмена
$obj = new Object;
// Установка параметров не требуется, все параметры жестко установлены внутри объекта
$obj -> SomeFunc ( $x ) ;
// Удаляем объект
$obj -> Free ( ) ;
Как вы думаете, какова разница в скорости обработки этих вариантов? Стоит ли ухудшать качество класса ради увеличения скорости?
Страниц (15): В начало « ... 7 8 9 10 11 12 13 14 [15]
Powered by ExBB FM 1.0 RC1. InvisionExBB