![]() |
![]() |
![]()
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. |
|
|
![]() |
![]()
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?) |
|
|
![]()
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? |
|
|
![]()
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.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 01:00 |