Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Engine strony, jak zaczac?
dzieciol4
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 5.11.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Seth
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
dzieciol4
post
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 5.11.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Seth
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
lolek09
post
Post #5





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 30.05.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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ę.


--------------------
Chciałbyś zobaczyć program bez błędów? Wyobraź sobie UFO, w którym Elvis doi swojego jednorożca
Go to the top of the page
+Quote Post
hawk
post
Post #6





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 08:11