Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] extends - jak działa?
scanner
post
Post #1





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Zakładająć, że mamy taki kod:[php:1:14a5bc17af]<?php
class BaseModule
{
var $TAO;

function BaseModule()
{
$this->TAO = new Smarty;
}
}

class ModuleA extends BaseModule
{
function Foo()
{
$this->TAO->display( 'example.tpl' );
}
}
?>[/php:1:14a5bc17af]
Mam pytanie. Czy $TAO w klasie ModuleA jest kopią $TAO z BaseModule, czy jest referencją czy tym samym elementem?
Interesuje mnie to ze względu na ilość pamięci zajmowanej przez wilokrotnie extendowane klasy.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Prawda wygląda (jak zazwyczaj) jeszcze bardziej skomplikowanie.

W tym przypadku klasa ModuleA nie ma włąsnego konstuktora, dlatego korzysta z konstuktora rodzica, I tylko dlatego ma dostęp do atrybut u$this->TAO

W przypadku gdyby miał własny konstruktor, a ty nie wymusiłbyś wywołania konstruktora rodzica - ten atrybut nie zostałby nawet zainicjowany.

A odpowiadając na Twoje pytanie - jest to osobny obiekt w pamięci. I przy każdym wywołaniu tego konstuktora - będzie tworzony kolejny.

Jeśli chcesz by zawsze był to ten sam - musiałbyś w konstuktorze odwoływać się np. do referencji do globala,
( coś ala http://www.zend.com/manual/language.oop.newref.php )
lub zmodyfikować konstruktora smarty, by zwracał referencje do samego siebie (choć nie wiem jak by to miało wyglądać w php 4 - jakieś zmienne typu static?)


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
scanner
post
Post #3





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Czyli, żeby mieć jeden obiekt smaty i nie musieć uzywać globa bądź $GLOBALS, jak dobzre rozumiem można użyć czegoś takiegojjak poniżej?[php:1:43e0d41b64]<?php
class BaseModule
{
var $TAO;

function BaseModule()
{
$this->TAO->_debug_mode = false;
}
}

class ModuleA extends BaseModule
{
function Foo()
{
$this->TAO->display( 'example.tpl' );
}
}

$Smarty = new Smarty();
$BaseModule = new BaseModule();
$ModuleA = new ModuleA();
$BaseModule->TAO = &$Smarty;

$ModuleA->Foo();
?>[/php:1:43e0d41b64]I czy kollejność linii 20 - 23 ma jakieś większe znaczenie?


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
DeyV
post
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




jesli będziesz się odowoływał do istniejących już obiektów to kolejnosc nie ma znacznia.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
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: 20.08.2025 - 20:13