| imho.ws |
![]() |
|
|
|
# 1 |
|
Newbie
Регистрация: 02.02.2004
Сообщения: 34
![]() |
Недавно прочел книжку O'Reilly "Upgrading to PHP 5" (кстати, если кому нужно, могу закинуть) и был просто потрясен новыми возможностями 5-ки. Вот только есть множество ньюансов, создающих переход на него проблематичным.
Народ, поделитесь опытом, как работают старые скрипты на новой версии PHP
__________________
Наше вам с кисточкой... |
|
|
|
|
# 4 |
|
Junior Member
Регистрация: 01.11.2002
Адрес: Kyiv, Ukraine
Сообщения: 95
![]() |
Переходить стоит на тестовых или девелоперских серверах - а для продакшена надо еще подождать.
Фмич мног разных вкусных и это клево - чем больше людей будут использовать в своих работах новую версиию тем быстрее в ней найдут баги и тем быстрее ее будут ставить на хостинги. |
|
|
|
|
# 7 |
|
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
хех, а мой класс работает и с 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";
}
}
__________________
убрано по просьбе администратора
|
|
|
|
|
# 8 |
|
Newbie
Регистрация: 02.02.2004
Сообщения: 34
![]() |
Sheryld, не-ООП подход хорош в маленьких скриптах, а когда проект разрастается до уровня портала, то хочешь-не хочешь приходится использовать ООП. Притом, ИМХО, он значительно упрощает жизнь.
Бтв, в твоем классе не проще было бы реализовать подключение и выбор базы данных в самом конструкторе класса? Sych, я тоже так подумываю, но еще хочется узнать, как работает, и самый главный вопрос: Насколько совместимо с прежним софтом. is_absent, ну нотисы эт фигня, варнингов не было?
__________________
Наше вам с кисточкой... |
|
|
|
|
# 9 |
|
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
Die_Slogan
совместимость сверху вниз, как обычно.. не помните как с php3 на php4 переходили? ![]() варнингов не было.. а нотисы связаны с объявлением свойств класса с помощью var вместо рекомендуемых private|public|protected [const]
__________________
Nunc est bibendum |
|
|
|
|
# 11 |
|
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
Die_Slogan
Все что работало в php4 будет работать в php5. А про "на практике" обычно говорят люди, у которых не очень качественный код... Конкретно к тебе я это не отношу -- не видел как ты пишешь. Чувствую пора создавать новую тему, о чистоте/качестве кода
__________________
Nunc est bibendum |
|
|
|
|
# 17 |
|
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
BetDeD
пятый PHP пока рекомендуют ставить как CGI, четвертый как модуль апача. разница, если не вдаваться в подробности в том, что php, стоящий как модуль апача имеет больше возможностей. и вроде как больше защищен.
__________________
Nunc est bibendum |
|
|