Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] extends - jak działa?
Forum PHP.pl > Forum > PHP
scanner
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.
DeyV
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?)
scanner
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?
DeyV
jesli będziesz się odowoływał do istniejących już obiektów to kolejnosc nie ma znacznia.
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.