Poznßvßnφ PHP

PHP 5 a Zend Engine 2.0

V dneÜnφm dφlu si povφme n∞co o novΘ verzi PHP 5, kterß b∞₧φ pod nov²m Zend Engine 2. PHP dosßhlo znaΦn²ch zm∞n zejmΘna po objektovΘ strßnce. P°ibyly dalÜφ vymo₧enosti jako nap°φklad odchytßvßnφ v²jimek pomocφ bloku try ... catch, rozhranφ, statickΘ metody a prom∞nnΘ, kompletn∞ p°epracovanß podpora XML, atd. PHP 5 se nynφ nachßzφ ve verzi PHP 5.0 Beta 3, co₧ by m∞la b²t ji₧ poslednφ beta verze (doufejme ;-). Nynφ si tyto zm∞ny popφÜeme.


Konstruktory a destruktory

Pomocφ konstruktoru m∙₧eme nap°φklad inicializovat prom∞nnΘ t°φdy p°i vytvo°enφ jejφ instance. Opakem je destruktor, kter² je volßn p°i uvoln∞nφ t°φdy z pam∞ti. V d°φv∞jÜφch verzφch PHP musel mφt konstruktor stejn² nßzev jako byl nßzev t°φdy.

V PHP 5 konstruktor vytvo°φme jako funkci "__construct" a destruktor jako t°φdu "__destruct". Pro zp∞tnou kompatibilitu pokud PHP nenalezne funkci "__construct", hledß se funkce stejnΘho nßzvu jako je t°φda (pro zachovßnφ funkΦnosti). Nynφ si konstruktor a destruktor ukß₧eme na p°φklad∞.


<?php
class Auto {
	var $typ;
	// Konstruktor
	function __construct($typ) {
		this->typ = $typ;
		echo "Vytvo°enφ instance <br>";
	}
	
	// Destruktor
	function __destruct() {
		echo "Uklidφme po sob∞ :) <br>";
	}
}
?>


P°φstup k metodßm a prom∞nn²m (Private, Protected)

Pomocφ modifikßtor∙ Private a Protected m∙₧eme ovlivnit viditelnost metod a prom∞nn²ch v t°φdßch. V d°φv∞jÜφch verzφch PHP byly vÜechny prom∞nnΘ a funkce p°φstupnΘ zvenΦφ (Public), nynφ jejich viditelnost a prßci s nimi m∙₧eme ovlivnit pomocφ t∞chto modifikßtor∙.

Modifikßtorem Private nastavφme, ₧e p°φstup k funkci nebo prom∞nnΘ bude pouze uvnit° t°φdy. Modifikßtorem Protected nastavφme p°φstup pouze uvnit° t°φdy nebo v t°φd∞ odvozenΘ.


<?php
class Auto {
	private		$typ;
	protected	$rychlost;
	
	public function Info()	{
		echo "Typ: " . $this->typ . "<br>";
		echo "Rychlost: " . $this->rychlost;
	}
	
	protected function Load() {
		$this->typ = 1;
		$this->rychlost = 220;
	}
}

class Moto extends Auto {
	public function Nacti() {
		$this->Load(); // Nastavφ po₧adovanΘ hodnoty
	}
}

$auto = new Auto();
echo $auto->typ; // Nezobrazφ nic
echo $auto->rychlost; // Nezobrazφ nic
$auto->Info(); // Zobrazφ po₧adovanΘ informace
$auto->Load(); // Nefunguje, nejsme ve stejnΘ t°φd∞ nebo t°φd∞ odvozenΘ

$moto = new Moto();
$moto->Nacti(); // Funguje, jsme v t°φd∞ odvozenΘ

?>


Konstanty

Nynφ m∙₧eme deklarovat uvnit° ka₧dΘ t°φdy konstanty. StarÜφ k≤d pob∞₧φ op∞t beze zm∞n.


<?php
class Auto {
	const rychlost = 200;
}

echo "Rychlost: " . Auto::rychlost;

?>


Rozhranφ

Rozhranφ je t°φda, kterß pouze definuje jmΘna metod a parametry, kterΘ metody mohou mφt.


<?php

interface iPrint {
	function Print();
}

interface iManage {
	function Manage();
}

class Auto implements iPrint,iManage {
	function Print() {
		// Vykonßme urΦit² k≤d
	}
	
	function Manage() {
		// Vykonßme urΦit² k≤d
	}
}
?>


Vyjφmky

PHP 5 p°ichßzφ s podporou odchytßvßnφ vyjφmek, kterß se znaΦn∞ podobß ostatnφm jazyk∙m (C#, Java, C++ atd.). Vyjφmky m∙₧eme obsluhovat pomocφ blok∙ try...catch...finally. V p°φpad∞, ₧e se vyskytne vyjφmka (chyba) m∙₧eme ji zpracovat (nap°. chybovΘ hlßÜenφ) v bloku try...catch. Do bloku finally m∙₧eme napsat k≤d, kter² se vykonß v₧dy po odchycenφ vyjφmek (nap°. uzav°enφ databßzovΘho spojenφ atd.).


<?php
class Auto {
	public function Load() {
		// P°ipojenφ k SQL serveru - p°φpadnΘ zpracovßnφ dat
	}
}

$auto = new Auto();

try {
	$auto->Load();
} catch (Exception $ex) {
	echo "Nastala chyba: " . $ex->getMessage();
	// Vykonßnφ nßmi zvolenΘho k≤du
} finally {
	// K≤d vykonan² na zßv∞r
}

?>

M∙₧eme takΘ vytvß°et vlastnφ chybovΘ hlßÜenφ, kdy staΦφ vytvo°it t°φdu odvozenou od t°φdy Exception, je₧ bude obsahovat konstruktor a funkci getMessage().


<?php
class Vyjimka extends Exception {
	private $info;
	
	function __construct($info) {
		parent::exception();
		this->info = $info;
	}
	
	function getMessage() {
        return "Nastala chyba: ". $this->info;
    }
}
?>

StatickΘ metody a prom∞nnΘ

StatickΘ metody a prom∞nnΘ jsou takovΘ, kterΘ m∙₧eme zavolat bez vytvo°enφ instance objektu. Pro nastavenφ pou₧ijeme modifikßtor static.


<?php
class Auto {
	static rychlost = 200;
	
	public static function Info() {
		// UrΦit² k≤d
	}
}

// Zavolßnφ metody
Auto::Info();

echo Auto::rychlost;
?>


JmennΘ prostory

JmennΘ prostory m∙₧eme vyu₧φvat k seskupenφ a zp°ehledn∞nφ k≤du.


<?php
namespace Projekty {
	class Auto {		
		public function Info() {
			// UrΦit² k≤d
		}
	}
}
// Vytvo°enφ instance
$auto = new Projekty::Auto();

?>


Klonovßnφ objekt∙

Nynφ m∙₧eme vytvo°it kopii instance t°φdy jednoduÜe zavolßnφm metody __clone.


<?php
class Auto {
	public function Info() {
		// UrΦit² k≤d
	}
}

// Klonovßnφ objektu
$auto = new Auto();
$auto->Info();
// Novß kopie
$autoNove = $auto->__clone();

?>


Vlastnosti

Op∞t jako v jin²ch objektov∞ orientovan²ch jazycφch p°ichßzejφ v PHP 5 vlastnostmi. Vlastnosti odd∞lujφ a zp°ehled≥ujφ celkovΘ uspo°ßdßnφ t°φd. P°i zφskßvßnφ a nastavovßnφ hodnot vyu₧φvßme tzv. Getter a Setter metody.


<?php
class Auto {
	function __set($promenna, $hodnota) {
		// UrΦit² k≤d
	}
	
	function __get($promenna) {
		// UrΦit² k≤d
	}
}
?>


Toto byly ty nejzßkladn∞jÜφ informace o novΘ verzi PHP 5. O dalÜφch informacφch si povφme po uvedenφ finßlnφ verze PHP 5.

Pro tento dφl to bude vÜe. V p°φÜtφm dφle budeme dßle pokraΦovat v poznßvßnφ jazyka PHP.

Petr Rympler