![]() |
![]() |
![]()
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 ![]() 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 |
|
|
![]() |
![]()
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] |
|
|
![]()
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 |
|
|
![]()
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] |
|
|
![]()
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 |
|
|
![]()
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..."
|
|
|
![]()
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 |
|
|
![]()
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...
![]() 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. ![]() [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ł±d startu","Brak połaczenia z baz± danych"); return false; } } return $this->arrClass['ADoDB'] ; } } ?>[/php:1:8d154cdda7] -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.06.2025 - 06:06 |