Основы ООП для начинающих чайников!
Итак что такое программирование? это когда при динамических параметрах один и тот же код способен генерировать нужный результат
Я не буду тут приводить списки функций и заумных выражений, а попробую в двух словах описать что есть программирование, и объяснить какие бывают методы в создан программ. Очень надеюсь что это поможет вам при создании собственных палгинов и хаков для LDU.
и так простое программирование
$foo = 1;
$bar = 2;
$res = $foo + $bar;
echo $res; // 3
я специально так растягиваю чтоб было понятнее. В результате мы получаем список простых операций над переменными, такие как отнять, добавить, сложить, вычесть.
Функциональный подход
$foo = 1;
$bar = 2;
function MyFunction($foo) {
global $bar;
$res = $foo + $bar;
return $res;
}
echo MyFunction($foo); // 3
в результате получаем сгруппированный набор операций над теме же переменными и строками, это сильно экономит время и код.
Объектный подход php4
$foo = 1;
$bar = 5;
class MyClass {
var $var = TRUE;
var $res = 0;
// конструкор
function MyClass($foo) {
global $bar;
while ($this->var){
if ($this->res < $bar)
{ $this->res += $foo; }
else
{ break; }
} //while
} // function
} // class
$echo = &new MyClass($foo);
echo $echo->res; // 5
Объектный подход php5
$foo = 1;
$bar = 5;
class MyClass {
protected $var = TRUE;
protected $bar = 0;
private $res = 0;
// конструкор
public function __construct($bar) {
$this->bar = $bar;
} // __construct
public function increment($foo){
while ($this->var){
if ($this->res < $this->bar)
{ $this->res += $foo; }
else
{ break; }
} //while
} // increment
public function res() {
return $this->res;
} // res
} // class
$MyObj = new MyClass($bar);
$MyObj->increment($foo);
echo $MyObj->res(); //5
Такой метод проходящий в вечном цикле с прерываниями дает возможность генерировать регулярно повторяющиеся куски кода, например html и парсить шаблоны.
Эта наглядная иллюстрация показывает, что помимо неимоверного количества if'ов используемого в LDU есть еще другие прелести программирования. Так, например если создать объект $DB который управляет соединением с базой данных MySQL то можно было бы несколько эффективнее использовать ресурс подключения, например одновременно соединятся с двумя БД.
Пример класса управления БД
class DB {
var $conn = NULL; // дескриптор соединения #source
var $result = FALSE; //очередь #source
var $delta = 0; //время sql #int
var $count = 0; //количество sql запросов #int
public function DB($host, $user, $pwd, $db){
$this->conn = @mysql_connect($host, $user, $pwd, TRUE) or diefatal('MySQL error : '.mysql_error());
@mysql_select_db($db, $this->conn) or diefatal('MySQL error : '.mysql_error());
return(TRUE);
}
public function db_query($query) {
$this->count++;
$xtime = microtime();
$this->result = mysql_query($query, $this->conn) or diefatal('MySQL error : '.mysql_error());
$ytime = microtime();
$this->delta += array_sum(explode(' ',$ytime)) - array_sum(explode(' ',$xtime));
return($this->result);
}
public function db_assoc($query){
return (mysql_fetch_assoc($query));
}
}
При помощи этого объекта реально не то что заменить существующие функции обращения к БД но и повысить скорость за счет отказа от половины значений глобальных массивов в движке таких как $cfg и $sys Так каждый желающий может добавить к этому классу новую функцию например функцию возвращающую массив от запроса
public function db_query_assoc($query) {
$return = $this->db_query($query);
$return = $this->db_assoc($this->result);
return($return);
}
Я так понимаю что нужно объяснить как пользоваться сиим чудом...
$DB = new DB($host, $user, $pwd, $db);
$sql = $DB->db_query("SELECT * FROM `table` WHERE `col1` = '$str' ORDER BY col2 ASC");
$row = $DB->db_assoc($sql);
// или так
$row = $DB->db_query_assoc("SELECT * FROM `table` WHERE `col1` = '$str' ORDER BY col2 ASC");
Конечно есть другие более развитые классы для управления БД но этот пример сделан конкретно на основе LDU и дублирует полностью все его возможности (и даже больше)
PS Мнение автора статьи на счет сильно изменилось... после общения на форуме dklab.ru... но тем не мение он не стал снимать статью
Свежие комментарии