Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Singleton i przekazywanie wartosci
Forum PHP.pl > Forum > PHP
cichy
Witam.
Od tygodnia walcze z singletonem (przejrzalem cale forum i kawałek google)
ale niestety nie wychodzi mi to. Czy ktoś mógłby mi wytłumaczyć na moim przykładzie co tutaj jest źle i dalczego to nie działa? Ewentualnie przrobić ten skrypt tak żeby działał winksmiley.jpg
[php:1:e10f162ad9]<?php

function & instance($clasa)
{
static $inst;
if (@is_null($inst[$clasa]))
{
$inst[$clasa] = new $clasa;
}
return $inst[$clasa];
}

class db
{
var $test2;
function db()
{
$this -> test2 = &instance('test');
$this -> test2 -> add('db', 'wartosc');

}
}

class test
{
var $arr = array();
function add($zmienna, $wartosc)
{
$this ->arr [ $zmienna ] = $wartosc;
}

function print_all()
{
print_r($this -> arr);
}
}


class main
{
var $db;
var $test;

function main()
{
$this -> test = new test;
$this -> db = new db;
$this -> test -> add('main', 'wartosc');
}
}

$core = new main;
$core -> test -> add('core', 'wartosc core');

$core -> test -> print_all();

/*
powinno wyswietlic:
Array
(
[main] => wartosc
[core] => wartosc core
[db] => wartosc
)
no chyba ze w innej kolejnosci winksmiley.jpg
*/
?>[/php:1:e10f162ad9]

Pozdro
Cudi
Jeżeli masz już funkcję do tworzenia i przechowywania instancji, do dla obiektów które chcesz mieć ogólnodostępne korzystaj tylko z niej.
[php:1:e798de67a5]<?php
$this -> test = new test;
$this -> db = new db;
?>[/php:1:e798de67a5]
Zamień na:
[php:1:e798de67a5]<?php
$this -> test = &instance(' test');
$this -> db = &instance('db');
?>[/php:1:e798de67a5]
Inaczej w klasach db i main będziesz operował na innej instancji klasy test, więc dane zostaną rozdzielone na dwa miejsca.
cichy
No wielkie dzięki...
już przynajmniej wiem gdzie robiłem błąd winksmiley.jpg

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