Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak wywolac? klasa::metod(); gdzie 'klasa' jest wartoscia..
patrycjusz
post 10.12.2003, 22:51:53
Post #1





Grupa: Zarejestrowani
Postów: 263
Pomógł: 0
Dołączył: 13.07.2003
Skąd: wawa

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


Jak w temacie a dokładniej...[php:1:1ee277504a]<?php
function MOD($action)
{
include_once MODS.$action.'.php';
action::perform();
}

?>[/php:1:1ee277504a]
Zwraca blad że klasa action nie istnieje i tutaj wlasnie moje pytanie jak w tym przypadku zastosować jakiś "alias" własnie na tą nazwe klasy? bo w przypadku podstawienia zmiennej $action jest oczywiscie parse error a przypadku jak powyzej ze takowej klasy nie ma rolleyes.gif
Z góry dziękuje za pomoc.
Pozdrawiam patS.


--------------------
www.tigroup.pl Rozwiązania informatyczne dla sektora MSP.
Projektowanie i tworzenie stron www, dedykowane rozwiązania e-biznes, outsourcing usług programis
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Seth
post 10.12.2003, 23:11:06
Post #2





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

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


[php:1:a9947f15c6]
function MOD($action)
{
include_once MODS.$action.'.php';
{$action}::perform();
}
[/php:1:a9947f15c6]
Go to the top of the page
+Quote Post
patrycjusz
post 10.12.2003, 23:20:11
Post #3





Grupa: Zarejestrowani
Postów: 263
Pomógł: 0
Dołączył: 13.07.2003
Skąd: wawa

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


hmm widzisz Seth twoj pomysl wyrzuca mi parse error :wink: ale obszedlem to tak (dla majach ten sam problem) [php:1:524c7a0417]<?php
function MOD($action)
{
include_once MODS.$action.'.php';
$action = & new $action;
$action->perform();
}
?>[/php:1:524c7a0417]
Teraz mam troszeczke inny probelm, do obiektu tego (a dokladnie perform) chcialbym przekazywac z gory jakis okreslony obiekt (nie przez wywolywanie juz w tej klasie odwolujac sie do GLOBAL) a raczej zalezalo by mi na uniwersalnym rozwiazaniu.... ma ktoś jakiś pomysł?


--------------------
www.tigroup.pl Rozwiązania informatyczne dla sektora MSP.
Projektowanie i tworzenie stron www, dedykowane rozwiązania e-biznes, outsourcing usług programis
Go to the top of the page
+Quote Post
adwol
post 11.12.2003, 01:40:15
Post #4





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


Metoda 1:
[php:1:ab006235c4]<?php
eval("$action::perform();");
?>[/php:1:ab006235c4]
Metoda 2:
[php:1:ab006235c4]<?php
call_user_func(array($action, 'perform'));
?>[/php:1:ab006235c4]
Go to the top of the page
+Quote Post
patrycjusz
post 11.12.2003, 05:53:51
Post #5





Grupa: Zarejestrowani
Postów: 263
Pomógł: 0
Dołączył: 13.07.2003
Skąd: wawa

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


Chyba się nie zrozumieliśmy adwol (lub ja niezrozumiałem ciebie),
posiedziałe troche jeszcze.. (ups... 05:41) i jednak pozostałem przy metodzie tej [php:1:647ba82401]<?php
function MOD($action = 'main')
{
parent::base();
include_once MODS.$action.'.php';
$action = & new $action;
$action->perform();
}
//objaśniając funkcja MOD jest wywolywana przez konstruktor jakiejś tam klasy, i funkcja MOD ma za zadanie wywołać odpowiedni plik z odowiednią klasą i jej metode perform() której to wywoływany jest znowu konstruktor klasy base() aby uzyskać w metodzie perform wlasności klasy base - jej konstruktora
?>[/php:1:647ba82401]
i prawie wszystko ok poza kilkoma rzeczami....
:arrow: 1. najdziwniejsze jest to że gdy w metdzie perform się odwołuje do obiektu adodb (inicjowanego w konstruktorze base) jest ok ale np. obiekt smarty również inicjowany w base już w perform nie jest dostepny a w MOD tak (to mnie dręczy nie moiłosiernie :wink: )
:arrow: 2 . czy jest jakiś sposób aby
Cytat
klasa A
konstruktor A
{
wartości inicjowane przez konstruktor klasy A,

wywolanie metody klasy A -> C
}
metoda C
{
->odwolujemy sie do D.  
}
}

klasa B extends A
{
wartosci z konstruktora klasy A,
}

//zaznaczam że nigdzie nie incjujemy B poza konstruktorem A.

Jak znam życie to namotałem ostro, ale albo zaczynam odczuwać pewien dyskomfort w programowaniu w php4 (własnie tutaj kiedy trzba kombinować) albo ... muszę jeszcze poczytać, więc zwracam się do was z prośbą o pomoc... :wink:


--------------------
www.tigroup.pl Rozwiązania informatyczne dla sektora MSP.
Projektowanie i tworzenie stron www, dedykowane rozwiązania e-biznes, outsourcing usług programis
Go to the top of the page
+Quote Post
DeyV
post 11.12.2003, 11:11:42
Post #6





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




proponuję zrobić to odrobinę inaczej.
Napisać clase typu CORE, która będzie posiadząc metodę [php:1:977216e9e8]<?php
CORE::&getClass( $strNazwaKlasy );
?>[/php:1:977216e9e8]
Funkcja ta sprawdza, czy w specjalnej tablicy ma już instancje poszukiwanej klasy. Jeśli tak - zwraca referencję do niej.
Jeśli nie - includuje potrzebne pliki, i tworzy instancję klasy w swojej tablicy obiektów.

Przy starcie skryptu jako jedyny obiekt tworzymy (np. w tablicy globalnej) [php:1:977216e9e8]<?php
$GLOBALS['CORE'] = new CORE;
?>[/php:1:977216e9e8]
A w skrypcie odwołujemy się do obiektów poprzez
[php:1:977216e9e8]<?php
$objTest =& $GLOBALS['CORE']->getClass( 'test' );
?>[/php:1:977216e9e8]

Jeśli chcesz przykładowy kod CORE, pisz.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
patrycjusz
post 11.12.2003, 15:07:25
Post #7





Grupa: Zarejestrowani
Postów: 263
Pomógł: 0
Dołączył: 13.07.2003
Skąd: wawa

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


niom bardzo chętnie bym zobaczył przykładową klase CORE :wink: , sam właśnie siadam w tej chwili i taką klasę będe pisał , albo starał się napisać :wink: , ale zadziwił mnie problem ze smarty i adodb (adodb widzi smart niestety nie). Ale problem wydaje mi się głębszy, mam nadzieje ze w 5 problem zostanie rozwiązany :wink:


--------------------
www.tigroup.pl Rozwiązania informatyczne dla sektora MSP.
Projektowanie i tworzenie stron www, dedykowane rozwiązania e-biznes, outsourcing usług programis
Go to the top of the page
+Quote Post
DeyV
post 11.12.2003, 17:38:10
Post #8





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




No to prosze - zauwaz, ze dla adodb przeznaczyłem sobną metodę. Być może dla smarty tez by było warto... smile.gif
Dodatkowo chciałem zauważyć, ze zawsze w CORE dołaczam 2 klasy c_error i c_info - które nie są oczywisćie konieczne do poprawnego działania. smile.gif

[php:1:8d154cdda7]<?php
/**
* 03-12-07 by DeyV
*/
class core{

function core( $arrParm='' ) { $this->__construct( &$arrParm ); }

var $arrDir = array(
'class' => 'core/class/' ,
'mods' => 'core/mods/' ,

);

var $arrMods = array();
var $arrClass = array();

var $objError, $objInfo ;


function __construct( $arrParm ='' )
{
if( !empty( $arrParm['dirClass'] ) ) {
$this->arrDir['class'] = $arrParm['dirClass'] ;
}
if( !empty( $arrParm['dirMods'] ) ) {
$this->arrDir['mods'] = $arrParm['dirMods'] ;
}


require_once $this->arrDir['class'] . "c_error.php";
$this->objError = new c_error;

require_once $this->arrDir['class'] . "c_info.php";
$this->objInfo = new c_info;

}

function isSetMod( $strName='', $strPrefix='' )
{
return( isset($this->arrMods[ $strPrefix . $strName ] ) );
}


function &getMod( $strName='', $strPrefix='' )
{
if( empty( $strName ) )
{
return FALSE;
}

if( $this->isSetMod( $strName , $strPrefix ) )
{
return( $this->arrMods[ $strPrefix . $strName ] );

}elseif( class_exists( $strName ) )
{
$this->arrMods[ $strPrefix . $strName] = new $strName;
return( $this->arrMods[ $strPrefix . $strName] );

}elseif( file_exists ( $this->arrDir['mods'] . $strName . '.mod.php' ) )
{
include_once( $this->arrDir['mods'] . $strName . '.mod.php' );
if( class_exists( $strName ) )
{
$this->arrMods[$strPrefix . $strName] = new $strName;
return( $this->arrMods[ $strPrefix . $strName] );
} else
{
return FALSE;
}
}else
{
trigger_error('bład: nie mozna zaladowac moda <b>'. $strName . '</b> ('. $this->arrDir['mods'] . $strName . '.mod.php)' );
return FALSE;
}
}



function &getADoDB( )
{
if( empty( $this->arrClass['ADoDB'] ) )
{
require_once('../lib/adodb/adodb.inc.php');


$this->arrClass['ADoDB'] =& ADONewConnection( $GLOBALS['dbtyp'] );
$this->arrClass['ADoDB'] -> debug = $GLOBALS['dbdebug'];

if( false === $this->arrClass['ADoDB'] ->
Connect( $GLOBALS['dbhost'], $GLOBALS['dbuser'], $GLOBALS['dbhaslo'], $GLOBALS['dbname'] ) )
{
$this->objError->dodaj("Bł&plusmn;d startu","Brak połaczenia z baz&plusmn; danych");
return false;
}
}
return $this->arrClass['ADoDB'] ;
}
}

?>[/php:1:8d154cdda7]


--------------------
"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 Wersja Lo-Fi Aktualny czas: 28.06.2025 - 06:06