IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   PHP 5, стоит ли переходить? (https://www.imho.ws/showthread.php?t=64875)

Die_Slogan 23.07.2004 12:48

PHP 5, стоит ли переходить?
 
Недавно прочел книжку O'Reilly "Upgrading to PHP 5" (кстати, если кому нужно, могу закинуть) и был просто потрясен новыми возможностями 5-ки. Вот только есть множество ньюансов, создающих переход на него проблематичным.
Народ, поделитесь опытом, как работают старые скрипты на новой версии PHP

Sheryld 23.07.2004 15:25

никто же не заставляет тебя писать код в ООП-стиле, кто придерживался этого подхода(например я), тот делал это еще в php4.

is_absent 23.07.2004 15:49

Die_Slogan
Скрипты работыют. только валятся нотисы, предупреждающие о том, что такая-та структура языка устарела...

Sych 23.07.2004 15:49

Переходить стоит на тестовых или девелоперских серверах - а для продакшена надо еще подождать.

Фмич мног разных вкусных и это клево - чем больше людей будут использовать в своих работах новую версиию тем быстрее в ней найдут баги и тем быстрее ее будут ставить на хостинги.

RaZEr 23.07.2004 15:53

На 5-ый PHP нужно переходить только при наличии сервера или письменного согласия хостера :)

BetDeD 25.07.2004 01:39

Я попробовал енто чудо. Вроде ничего. Тока возникли проблемы с функциями для работы с MySQL. Напроч отказывается коннектиться к базе. В чом может быть дело?

Sheryld 25.07.2004 02:53

хех, а мой класс работает и с php5:)

если придерживался нормального стиля программирования, то никаких проблем не возникнет, при желании останется потом потихоньку переписать код специально под php5.

что прочитал:

новый ООП.

наконец-то появились модификаторы доступа.
свойства
конструкторы и деструкторы
наследование(в том числе и реализуемых классом интерфейсов)
статические методы

появились итераторы(в SPL). это радует. пока их не пробовал, только прочел о них и глянул пару примеров.

вещь имхо крайне полезная. теперь не надо будет писать бесконечно унылые рекурсивные классы для вывода древовидных структур и т.д.

появились интерфейсы. тоже хорошая штука. но непонятно, как это дело использовать в реале.

пример в .NET

1. описываем стандартный интерфейс доступа к данным, например.
2. далее пишем реализацию(класс) для конкретной базы данных(используя уже типизированный провайдер, например для SqlServer - SqlClient).
3. а вот тут вся суть предыдущих действий. создаем класс бизнес логики и используем единый(ну почти, тут есть кое-какие проблемы, но они решаемы) интерфейс доступа к данным, т.е. не нужно каждый раз переписывать этот класс для разной бд. и с помощью рефлексии, у нас "на автомате" подставляется нужный класс.

вобщем все это конечно пространно, но кто знает что такое n-tier appz, тот меня поймет.

ну и вообще интерфейсы, это хороший путь описания функциональности класса, без его реализации(собственно это и есть отличие от абстрактного класса).

короче нужно смотреть рефлексию.

далее, xml.

наконец-то, заявлено о поддержке следующих технологий:
DOM
SAX
SimpleXML
XPath
XSLT
для нас представляют интерес все, кроме SAX.
а где Xml Schema?! :mad:

о чем не имею представления:
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, а можно использовать и как есть.

Die_Slogan 26.07.2004 10:15

Sheryld, не-ООП подход хорош в маленьких скриптах, а когда проект разрастается до уровня портала, то хочешь-не хочешь приходится использовать ООП. Притом, ИМХО, он значительно упрощает жизнь.
Бтв, в твоем классе не проще было бы реализовать подключение и выбор базы данных в самом конструкторе класса?
Sych, я тоже так подумываю, но еще хочется узнать, как работает, и самый главный вопрос: Насколько совместимо с прежним софтом.
is_absent, ну нотисы эт фигня, варнингов не было?

is_absent 26.07.2004 13:05

Die_Slogan
совместимость сверху вниз, как обычно.. не помните как с php3 на php4 переходили? :)
варнингов не было..
а нотисы связаны с объявлением свойств класса с помощью var вместо рекомендуемых private|public|protected [const]

Die_Slogan 27.07.2004 12:22

is_absent, совместимость сверху вниз, это в идеале, а на практике, как обычно, бывают свои приколы.

is_absent 27.07.2004 12:42

Die_Slogan
Все что работало в php4 будет работать в php5. А про "на практике" обычно говорят люди, у которых не очень качественный код...
Конкретно к тебе я это не отношу -- не видел как ты пишешь.

Чувствую пора создавать новую тему, о чистоте/качестве кода :)

Die_Slogan 27.07.2004 15:55

Хыы, кривости кода у всех хватает

is_absent 27.07.2004 16:07

Die_Slogan
я не про ту, которая у всех, а ту, на которую говорят "ну работает же, чего лезть-то?" :-)

Sheryld 27.07.2004 18:25

есть две вещи, которые следует различать.

1. элементарная "безграмотность" программиста.
2. используемая методология.

иногда вторым оправдывают первое:)

is_absent 27.07.2004 20:02

эээ... мы несколько ушли от темы.. может в отдельное обсуждение выделить данный вопрос? или попросить админов создать раздел.. типа "обсуждение качества кода" :)

BetDeD 30.07.2004 21:19

А в качестве чего лучше "прикрутить" PHP к Apachе (на локалхосте)?
В качестве модуля или CGI binary?
И в чём вообще разница?

is_absent 30.07.2004 21:35

BetDeD
пятый PHP пока рекомендуют ставить как CGI, четвертый как модуль апача. разница, если не вдаваться в подробности в том, что php, стоящий как модуль апача имеет больше возможностей. и вроде как больше защищен.

Sheryld 30.07.2004 22:19

у меня стоит php5 как модуль к apache2.
php4 как модуль к apache1.3.x.

RaZEr 30.07.2004 23:14

Цитата:

Sheryld: а где Xml Schema?!
Да вроде на месте.

Sheryld 30.07.2004 23:34

а что можно сделать, кроме как проверить xml-документ на соответствие данной схеме? это не серьезно:)

RaZEr 21.09.2004 07:08

XML Shema для этого и нужна, если ты не знал...

Sheryld 21.09.2004 10:05

ну хорошо, а скажем такая задача, на основе xml создать базу данных, или запамить данные? опять все руками...я сказал, что неплохо было бы забацать хоть что-то, оттдаленно напоминающее dot net framework(system.xml)

Sych 21.09.2004 11:07

Для того что бы что то на чем то делать - в перую очередь нужна голова на плечах, фантазия, а так же умение читать - чего у некоторых людей катострофические ненаблюдается.

Что можно реально сделать на php5 со всеми примочками можете посмотреть здесь

http://193.110.160.72/en/
http://193.110.160.72/ru/
http://193.110.160.72/uk/

смотреть раздел статьи

машина доступна с 8-16 GMT

для каждой страницы можно посмотреть ее исходник xml + xslt запросив ее с соответствующим расширением.

Так что делаем выводы :-)

Sheryld 21.09.2004 11:51

неплохо, а я вот все давно хочу написать DAL, основанный на xml, идея не нова, но мне до сих пор не стречалась реализация под php.

идея в следующем.

1. все запросы - это xml(т.е. есть некоторый язык, который формирует запрос).

2. есть парсер - который строит sql из xml.

3. все результаты также преобразуются в xml и затем(с помощью xslt/html/etc) выводятся.

p.s. завидую, у нас на хостинге этого еще долго не будет:(

Sych 21.09.2004 12:04

дык это и не хостинг это моя рабочая машина пока ;-)

движок кстати полностью открытый - детально почитать можно здесь

Конечно тем кто разобрался в новинках в 5 на 4 даже смотреть не хочеться

Sheryld 21.09.2004 12:53

Цитата:

дык это и не хостинг это моя рабочая машина пока ;-)
вот и я о том же:) уже писал тут, что хостинг с поддержкой нового ПО нужно еще поискать, но это, имхо, беда open source в целом, т.е. технологии появляются на свет мертворожденными. при желании могу ракскрыть и эту тему...на примере того же php5.

Sych 21.09.2004 13:22

не совсем согласен - хостинги с php5 уже есть но их не так много - для этого нужно время, так же стоит затронуть тот аспект что многие стистемы пишутся специально под конкретное железо - так что у заказчиков с этим вопросов не возникает - те тут надо смотреть на кого в первую очередь ориентирован тот или иной продукт.

RaZEr 21.09.2004 17:44

Цитата:

хостинги с php5 уже есть
Да, причем довольно давно. Есть даже такие, которые ставили beta И RC. Но проблема даже не в хостерах. Дело в том, что окна не бесплатны, как и куча различных фишек к ним.

2 Sych:По сайту:
Код:

Page Not Found
File : d:\cvs\engine2.0\core\sybe.class.php
Line : 206"


Sych 21.09.2004 17:49

я же написал что там не все работает (смотри раздел статьи) - а то что ты увидел это обработчик ошибок (мы там щас сделали многоуровневый без вывода технической инфы) но я еще не рискую обновляться - сам поинмаешь люди смотрят :-) + в cvs есть есть еще модуль статических страниц, думаю завтра обновлюсь.

Troj 23.09.2004 09:04

работаю с пхп 5.0 вроде нормально, глюков левых не выскакивало:)

Sheryld 23.09.2004 10:03

2Razer про какие окна ты говоришь?

RaZEr 23.09.2004 19:05

А что есть бесплатные версии?

Sheryld 24.09.2004 17:44

бесплатные версии чего? я не понимаю о чем ты говоришь...

RaZEr 24.09.2004 18:03

... бесплатные версии операционной системы Microsoft Windows.

PS: Так лучше? ;)

Sheryld 24.09.2004 18:33

а причем тут php5? это вотчина *nix - хостеров.

RaZEr 24.09.2004 18:34

Это я камень в огород ASP бросал ;)


Часовой пояс GMT +4, время: 00:50.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.