Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Engine strony, jak zaczac?
Forum PHP.pl > Forum > PHP
dzieciol4
Witam!
Chce napisac swoj pierwszy silnik strony. Wiem mniej, wiecej smile.gif na czym to polega biggrin.gif. Napisalem juz wiekszosc klass ktore beda wchodzic w jego sklad tzn. mam klasy glowne, chyba rdzeniem sie to nazwywa smile.gif , i klasy ktore korzystaja z wlasciwosci/metod klas glownych. Korzystam takze ze smartow, tzn. mam przygotowane pliki w szablonach i wiem jak ich uzywac. I moim problemem jest brak pomyslu/inteligencji aby to polaczyc w skladna calosc. Dodatkowo czytajac wasze posty mozna sie domyslic, ze zalecacie korzystanie z referencji. I tutaj (skonczywszy dluugi wstep) pojawiaja mi sie pytania:
1. Czy klasa 1 ktora jest "korzeniem" wszsytkich klas ma odpowiadac za inicjowanie innych klas? np.
[php:1:c9afb0cb4f]<?php
class core
{
function news()
{
$news = new klasaobslugujacanewsy;
$news -> jakasfunkcjaztejklasy();
}
}
?>[/php:1:c9afb0cb4f]
itd. chyba rozumiecie o co mi chodzi? Mam problemy z przekazywaniem swoich mysli smile.gif
2. Czy zawsze nalezy pracowac na kopiach obiektow? Jezeli tak to dlaczego?
3. Czy nalezy inkludowac biblioteki klass uzalezniajac je od np. strony na jakiej znajduje sie user? np.
[php:1:c9afb0cb4f]<?php
if ($_GET[strona] == newsy)
{

include ('newsy.class.lib');

}

class core
{
if ($_GET[strona] == newsy)
{

function news()
{
$news = new klasaobslugujacanewsy;
$news -> jakasfunkcjaztejklasy();
}

}
}
?>[/php:1:c9afb0cb4f]
Jak bede mial jeszcze jakies pytania to bede pytal smile.gif Dzieki za odp.
Seth
Cytat
1. Czy klasa 1 ktora jest "korzeniem" wszsytkich klas ma odpowiadac za inicjowanie innych klas?

To zalezy. JA robie to w ten sposob, ze glowna moja klasa (nie wiem tylko czy mozna to nazwac God Class... ale mniesza o to) jest klasa Page, ktora to odpowiada za inicjowanie pozostalych - podobnie jak to ma miejsce np w asp.net. W niej po odpaleniu Proceed() przetwarzam kolejne klasy i zadania.
Mozna to jednak zrobic inaczej: nie uzywac jednej klasy glownej tylko strukturalnie odalac po kolei klasy poza obiektem glownym (jezeli takowy istnieje).
Cytat
[php:1:ce493d9ea5]<?php
class core
{
function news()
{
$news = new klasaobslugujacanewsy;
$news -> jakasfunkcjaztejklasy();
}
}
?>[/php:1:ce493d9ea5]

Jezeli ma to byc klasa core to metoda News jest tu nie na miejscu. Zamiast tego dal bym ogolna metode do ladowania obiektu new np: InitModule( 'news' );
Trzeba pamietac w OOP, ze klasa to rzecz z realnego swiata i nie mozna do jednej rzeczy pakowac wlasciwosci innych.
Przyklad: klasa ksiazka nie powinna miec metod Odkurzaj() - z klasy Odkurzacz, czy Jedz() z klasy np. samochod.
Podsumowujac: Core musi miec tylko to co jest jej niezbedne ale nie powinna posiadac metod, wlasciwosci przeznaczponych dla jednego (innego) obiektu.
Cytat
2. Czy zawsze nalezy pracowac na kopiach obiektow? Jezeli tak to dlaczego?

Co rozumiesz przez kopie obiektu ? Chodzi Ci o klonowanie ?
Cytat
3. Czy nalezy inkludowac biblioteki klass uzalezniajac je od np. strony na jakiej znajduje sie user?

Powineines includowac tylko te klasy, ktore Ci sa w danym momencie niezbedne. CZyli np na podstawie id przekazanego przez usera.
dzieciol4
Dzieki za odpowiedz! Ja chyba cos zle zrozumialem z tymi referencjami? Bo klonowanie i przekazywanie przez referencje to chyba nie to samo? Moglby mi ktos to wytlumaczyc ew. skierowac mnie do wyjasnienia? Dzieki za odp.
Seth
Klonowanie to tworzenie takich samych obiektow - z tymi samymi wlasciwosciami w danym momencie.

Przyklad:
[php:1:b418865cc0]<?php
class foo
{
var
$test = 0;


function Clone()
{
return $this;
}
}

$test = new foo();
$test->test = 2;

$klon = $test->Clone();
print $klon->test."rn";

$test->test = 4;

print $klon->test;
?>[/php:1:b418865cc0]

Wynik:
Cytat
2
2


Referencja to skolei przekazywanie jakby uchwytu do obiektu - aliasu.

Przyklad:
[php:1:b418865cc0]<?php
class foo
{
var
$test = 0;


function &GetRef()
{
return $this;
}
}

$test = new foo();
$test->test = 2."rn";

$ref = $test->Clone();
print $ref->test;

$test->test = 4;

print $ref->test;
?>[/php:1:b418865cc0]

Wynik:
Cytat
2
4
lolek09
Ja to jeszcze jestem zielony właściwie, ale z tego co się zrodziło w moim ograniczonym umyśle wynika, że referencji powinno się używać na przykład przekazując do funkcji duży obiekt, wtedy w pamięci nie jest tworzona druga kopia (oszczędność pamięci).
Jeśli masz duże obiekty, to przekazuj przez referencję.
hawk
php 4
Referencji używaj przekazując obiekty, ponieważ PHP4 domyślnie kopiuje obiekty.
Nie używaj referencji do przekazywania wszystkiego innego (zmiennych, tablic, itd.), ponieważ PHP4 potrafi zliczać odwołania do zmiennych i fizyczną kopię wykona nie wtedy, kiedy wykonasz przypisanie, ale dopiero wtedy, kiedy zmienisz wartość. Czyli, jeżeli przekazujesz do funkcji w parametrze wielką tablicę, a w samej funkcji nie zmieniasz nic w tej tablicy, PHP4 nie wykona kopii tablicy.

Wyjątkiem są sytuacje, kiedy zależy ci na działaniu odwrotnym, tj. chcesz mieć kopię obiektu, albo chcesz, żeby funkcja mogła zmienić wartość zmiennej przekazanej w parametrze.

Tako rzecze Zend.

PHP5
PHP5 zawsze przekazuje obiekty przez referencję (wreszcie!). Do robienia kopii służy funkcja __clone() i tylko ona. Więc cała część o referencjach do obiektów jest nieaktualna. Reszta (referencje do zmiennych) pozostaje bez zmian.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.