maja 31 2008

Synchronizacja plików PHP w Eclipse część 2 – SVN w Subclipse

Tag: Eclipse, PHPMatheW @ 19:03

Jeżeli pracowaliśmy kiedyś nad projektem w kilka osób z pewnością natrafiliśmy na problem, w którym każdy z programistów pracuje nad częścią aplikacji, powiązaną z innymi, tworzonymi przez inne osoby. Każda zmiana danej części projektu powinna być od razu dostępna dla naszych współpracowników, by mogli oni operować na zmodyfikowanych, bądź nowo stworzonych przez nas plikach. Można to uzyskać poprzez synchronizację plików projektu.

Systemy kontroli wersji

Wykorzystanie systemów kontroli wersji to jedna z najpopularniejszych metod synchronizacji plików i projektów programistycznych. O synchronizacji jako takiej a w szczególności poprzez FTP pisałem w pierwszej części artykułu.
Continue reading “Synchronizacja plików PHP w Eclipse część 2 – SVN w Subclipse”


marca 31 2008

Dostęp do tablic poprzez magiczną metodę __get() w PHP5

Tag: PHPMatheW @ 23:19

Przypuśćmy, że mamy klasę i chcemy w niej za pomocą magicznej metody __get otrzymywać dostęp do pewnej tablicy:

class test {
	private $ar=array('field'=>array());	

	public function __get($name){
		return $this->ar[$name];
	}

	public function showMe(){
		var_dump($this->ar['field']);
	}
}

$a=new test;
$a->field[]='testValue';
$a->showMe();

Spodziewamy się, że za pomocą $a->field[]=’testValue’; dodamy do tablicy $a->ar['field'] wartość ‘testValue’. Jednak jak możemy się przekonać listując potem tablicę wcale tak się nie dzieje! Otóż tablice zwracane są w metodzie __get poprzez wartość, a nie referencję.

Rozwiązanie

Zamiast tablicy skorzystamy z .. obiektów, które w PHP5 zawsze są zwracane przez referencję. Doskonałym zamiennikiem zwykłej tablicy jest obiekt ArrayObject.

class test {
	private $ar=array('field'=>array());

	public function __construct(){
		$this->ar['field']=new ArrayObject;
	}

	public function __get($name){
		return $this->ar[$name];
	}

	public function showMe(){
		var_dump($this->ar['field']);
	}
}

$a=new test;
$a->field[]='testValue';
$a->showMe();

No i działa :]


marca 22 2008

Synchronizacja plików PHP w Eclipse część 1 – FTP

Tag: Eclipse, PHP, SoftwareMatheW @ 22:54

Synchronizacja jest niezwykle ważnym elementem w powstawaniu projektu programistycznego, szczególnie w tworzeniu aplikacji internetowych. Jest ona niezbędna przy pracy nad kodem w kilka osób, gdy każdy z programistów musi posiadać aktualne wersje aplikacji tworzone przez współpracowników, a także podczas pracy nad kodem na lokalnym stanowisku pracy, będąc jednocześnie zmuszonym do wgrywania plików na serwer poprzez FTP.

Do pracy nad kodem w grupie programistycznej znakomicie nadają się systemy kontroli wersji takie jak CVS, czy jego następca SVN. Dzięki nim zachowamy spójność w kodzie pomiędzy każdą osobą pracującą nad projektem i jednocześnie będziemy mieli podgląd wszystkich zmian zachodzących w kodzie, mając możliwość przywrócenia wersji pliku z jakiegokolwiek momentu byśmy chcieli. O systemach kontroli wersji więcej przyjdzie dowiedzieć się z następnej części artykułu.

FTP też może stanowić rodzaj synchronizacji wykorzystywanej w pracy grupowej, chociaż bardzo ubogiej. Niemniej jednak głównym celem FTP jest utrzymywanie najnowszej działającej wersji aplikacji na serwerze i wysyłanie nań jedynie zmienionych plików. Zwykle korzystamy z odrębnego klienta FTP jak np. FileZilla, Total Commander etc. jednak o wiele wygodniej jest, gdy możemy wysyłać pliki bezpośrednio z edytora. O tym traktować będzie ten artykuł.

Continue reading “Synchronizacja plików PHP w Eclipse część 1 – FTP”


lutego 28 2008

Cache - klasa do cachowania danych

Tag: PHPMatheW @ 1:10

Mam do zaprezentowania własną klasę do cachowania. Umożliwia ona obok podstawowej funkcji odczytywania danych z danym czasem ważności podział danych na grupy, usuwanie wybranych danych z cache, grupy, bądź całego cache, wybór sterowników (aktualnie utworzona jest jedna strategia - do zapisu do plików, jednak spełniając interfejs CacheDriver możemy napisać własny - np. do zapisu do pamięci czy bazy), prosty debugMode - włączenie spowoduje wyrzucanie wyjątków.

Kod sprawdzany na PHP 5.2.1, powinien uruchamiać się na każdym PHP5.

Klasa jest opublikowana na licencji GPL.

Przykład:


	require_once 'cache.class.php';
	require_once 'fileCacheDriver.class.php';

	function getPrinters(){
		return array('HP 845C', 'Canon E23', 'Lexmark L45');
	}

	try {
		$cache=new Cache();
		$cache->addDriver('file', new FileCacheDriver());

		$printers=$cache->get('products', 'printers', 500); # zwraca dane z cache z grupy products o id printers

		if($printers===false) { #nie ma danych w cache
			$printers=getPrinters();
			$cache->set('products', 'printers', $printers); #ustawia dane do cache
		}	

		var_dump($printers);
	}
	catch (CacheException $e){
		echo 'Error: '.$e->getMessage();
	}

Pokaż cały kod
Pobierz


lutego 17 2008

Drzewa kategorii w SQL i PHP metodą IP

Tag: MySQL, PHPMatheW @ 1:46

Drzewa kategorii w relacyjnych bazach danych to ciekawy temat. Różnych implementacji takich drzew jest wiele, ale żadna nie jest idealna – istotna jest łatwość w modyfikacji drzewa, szybkość pobierania danej gałęzi do wyświetlania, czy zliczania podkategorii w gałęzi.

Jak wspomniałem implementacji jest wiele – poczynając od podstawowego lecz nieoptymalnego rozwiązania z polem identyfikacyjnym rodzica, po nested sets czy metodę depesza. Część z nich opisanych jest tutaj.

Mi jednak spodobał się jeszcze inny sposób - Materialized Path AKA drzewka ip.

Continue reading “Drzewa kategorii w SQL i PHP metodą IP”


Następne »