хех, а мой класс работает и с php5
если придерживался нормального стиля программирования, то никаких проблем не возникнет, при желании останется потом потихоньку переписать код специально под php5.
что прочитал:
новый ООП.
наконец-то появились модификаторы доступа.
свойства
конструкторы и деструкторы
наследование(в том числе и реализуемых классом интерфейсов)
статические методы
появились итераторы(в SPL). это радует. пока их не пробовал, только прочел о них и глянул пару примеров.
вещь имхо крайне полезная. теперь не надо будет писать бесконечно унылые рекурсивные классы для вывода древовидных структур и т.д.
появились интерфейсы. тоже хорошая штука. но непонятно, как это дело использовать в реале.
пример в .NET
1. описываем стандартный интерфейс доступа к данным, например.
2. далее пишем реализацию(класс) для конкретной базы данных(используя уже типизированный провайдер, например для SqlServer - SqlClient).
3. а вот тут вся суть предыдущих действий. создаем класс бизнес логики и используем единый(ну почти, тут есть кое-какие проблемы, но они решаемы) интерфейс доступа к данным, т.е. не нужно каждый раз переписывать этот класс для разной бд. и с помощью рефлексии, у нас "на автомате" подставляется нужный класс.
вобщем все это конечно пространно, но кто знает что такое n-tier appz, тот меня поймет.
ну и вообще интерфейсы, это хороший путь описания функциональности класса, без его реализации(собственно это и есть отличие от абстрактного класса).
короче нужно смотреть рефлексию.
далее, xml.
наконец-то, заявлено о поддержке следующих технологий:
DOM
SAX
SimpleXML
XPath
XSLT
для нас представляют интерес все, кроме SAX.
а где Xml Schema?!
о чем не имею представления:
SQLite
Web Services(SOAP) - в php-версии
Tidy
вобщем, налицо прогресс, ну и как обычно огроменная ложка дегтя:
В Dot NET(.NET) все это и много больше появилось давным давно.
Также несколько языков программирования, мощнейшая система готовых классов(.NET Framework) и т.д. и т.п.
скоро: .NET Fкamework 2.0(уже есть beta). И там очень много нового(в ASP.NET, например).
поэтому пока что php5 все еще безнадежно отстает от asp.net.
вывод:
переходить надо, я бы даже сказал необходимо. не секрет, что сегодня web-приложения это сложные распределенные системы, которые требуют определенного подхода к разработке(в том числе и к языку программирования).
php5, приобретя многие положительные качества, по прежнему остается довольно "легким" и массовым решением.
конечно, если вы предпочитаете писать 2-3 строчки кода в HTML, то скорее всего почти не заметите разницу, ну а все остальные оценят все мощь объектно-ориентированного подхода.
простой пример, этот(он менялся весьма незначительно) класс я использую почти во всех своих разработках на php(там где применяется mysql):
Код:
<?php
///////////////////////////////
// Description: ClassHelper for Mysql
// Author: Denis 'Sherman' Gabaidulin © 2002-2004
// Version: 0.3.3 beta(global version 2)
// Comments: __________________
///////////////////////////////
////////////////////////////////////////////////////////
// +added mysql_num_rows check for result
////////////////////////////////////////////////////////
class MySql
{
var $dbServer = "localhost";
var $dbName = "base";
var $dbUser = "user";
var $dbPass = "ggggg";
var $dbConn;
var $dbResult;
var $dbErrorNumber = 0;
var $dbErrorMessage = "";
var $debugFromHanlder = "";
/*function MySql()
{
//default constructor
}*/
function MySql($dbServer = null, $dbName = null, $dbUser = null, $dbPass = null)
{
//default constructor
if ($dbServer != null)
{
$this->dbServer = $dbServer;
}
if ($dbName != null)
{
$this->dbName = $dbName;
}
if ($dbUser != null)
{
$this->dbUser = $dbUser;
}
if ($dbPass != null)
{
$this->dbPass = $dbPass;
}
}
function MySql_Connect()
{
if (!isset($this->dbConn) || $this->dbConn == null)
{
$this->dbConn = @mysql_connect(
$this->dbServer,
$this->dbUser,
$this->dbPass);
$this->MySql_ErrorHanlder("connect");
}
}
function MySql_SelectDb()
{
if (isset($this->dbName) && $this->dbName != null)
{
@mysql_select_db($this->dbName,$this->dbConn);
$this->MySql_ErrorHanlder("select");
}
}
function MySql_QueryDb($dbQuery)
{
if (isset($dbQuery) && $dbQuery != null)
{
$this->dbResult = @mysql_query($dbQuery,$this->dbConn);
$this->MySql_ErrorHanlder("query");
if (@mysql_num_rows($this->dbResult) == 0)
{
$this->dbResult=null;
}
}
}
function MySql_Close()
{
if (!isset($this->dbConn) || $this->dbConn != null)
{
@mysql_close($this->dbConn);
$this->MySql_ErrorHanlder("close");
}
}
function MySql_ErrorHanlder($debugFromHanlder)
{
$this->dbErrorNumber = mysql_errno();
$this->dbErrorMessage = mysql_error();
if ($this->dbErrorNumber != 0)
{
echo $this->dbErrorNumber . " " . $this->dbErrorMessage;
echo " " . $debugFromHanlder . "<BR>\r\n";
}
/*if ($this->dbErrorNumber == 2003)
{
sleep(2);
}*/
$this->dbErrorNumber = 0;
$this->dbErrorMessage = "";
}
}
?>
Использование:
Код:
$db = new MySql(null,"databse","root","gggg");
$db->MySql_Connect();
$db->MySql_SelectDb();
$db->MySql_QueryDb("select * from Categories limit 1, 10");
if ($db->dbResult)
{
while($row = mysql_fetch_array($db->dbResult))
{
echo $row[0] . "<BR>\r\n";
}
}
можно переписать его специально под php5, а можно использовать и как есть.