Показать сообщение отдельно
Старый 25.07.2004, 02:53     # 7
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
хех, а мой класс работает и с 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, а можно использовать и как есть.
__________________
убрано по просьбе администратора
Sheryld вне форума