Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
PHP

[OOP] Problem z dostępem do funkcji z klasy

php oop cms

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
4 odpowiedzi w tym temacie

#1 Leihto

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:452
  • Lokalizacja:Rabka
Offline

Napisano 03.09.2012 16:20

Witam :)


Jestem w trakcie pisania własnego CMSa w OOP ;)


Schemat:
Dołączona grafika


Zaczne od drobnego opisu, o co chodzi :P

./admin/index.php - Odpala kontroler Controler.php
./admin/sources/Controller.php - Ładuje resztę plików + obsługuje errory itp ;)
/classes/classTemplates.php - Obsługa templatek...
../constants.php - Zawiera definicje używane w całym skrypcie.
/classes/classMember.php - Wykonuje 'działania' na użytkownikach, np pobiera informacje o nim z DB.
/classes/classDB.php - Obsługuje zapytania do bazy danych
/admin/sources/Registry.php - Ładuje plik konfiguracyjny, zajmuje się odpalaniem aplikacji / hooków itp.

Z poziomu Registry.php normalnie mogę uruchamiać zapytania poprzez classDB.php.
Problem się pojawia, gdy tworzę aplikację administracyjną, która ma za zadanie sprawdzić poprawność danych użytkownika.
Wygląda to tak:

<?php
class AdminFunctions {

/* Przechowuje klase Registry */
protected $registry;

public function __construct( ) {
$this->registry = new Registry( );
print_r($this->registry->member()->fetchMemberData( 1 ));
}
}


Klasa Member:

<?php
class classMember {
protected $registry;
protected $controller;
protected $DB;
protected $settings;

/**
* Constructor
*
* @access public
* @return @e void
*/
public function __construct( ) {
$this->controller = new Controller( );
$this->registry = new Registry( );
$this->DB = new DB();
$this->settings =& $this->registry->fetchSettings( );
}

/**
* Function fetchUserSettings
*
* @access public
* @return @e array
*/
public function fetchMemberData( $memberID = NULL )
{
if( $memberID != NULL )
{
$memberID = (int)$memberID;
if( $memberID == NULL )
return NULL;

$query = $this->DB->Query( "SELECT * FROM `{$this->settings['Prefix']}members` WHERE `member_id` = {$memberID}" );
if( mysql_num_rows( $query ) < 1 )
return NULL;

return mysql_fetch_array( $query );
}
return NULL;
}
}


Wtedy zapytanie nie zostaje przekazane do funkcji DB::Query( $Query ).
Co może być tego przyczyną, oraz jak rozwiązać / ominąć ten problem?

Dodam że próbowałem w Registry.php dodać funkcję member()
public function member( )
{
return new classMember( );
}


Liczę na poważne odpowiedzi ;) Jeżeli nie masz pojęcia o co chodzi, to nawet nie pisz.

Użytkownik Leihto edytował ten post 03.09.2012 16:22

  • +
  • -
  • 0
Portek: Za 20zł, to ja nawet notatnika nie otworze..

Nowe portfolio. Ciekawe artykuły, ciekawe przykłady: WojtusDEV.pl

#2 Portek

    Kończymy zabawę, permanentna emerytura!

  • Przyjaciel

Reputacja: 976
Master

  • Postów:3 007
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Częstochowa
Offline

Napisano 03.09.2012 16:45

Zakładam że klasa Register ma zaimplementowany autoloader klas? Pewien jesteś że poprawnie ładujesz je (odpowiednie foldery)? Sprawdzałeś logi php'a?
  • +
  • -
  • 0

serwer-1.png
IP: ts3.cserwerek.pl


#3 Leihto

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:452
  • Lokalizacja:Rabka
Offline

Napisano 03.09.2012 16:52

Aktualnie loader jest zawarty w Controllerze ;)

private function LoadLibs( ) {
$this->libs = array(
KERNEL_DIR . "/classTemplates.php",
ADMIN_DIR . "./sources/leRegistry.php",
KERNEL_DIR . "/classDB.php",
KERNEL_DIR . "/classMember.php",
);
foreach($this->libs as $lib)
if( !$this->is_file_loaded($lib) ) require_once($lib);
}
public function is_file_loaded( $fileName = NULL )
{
return ( in_array( $fileName, get_included_files() ) ) ? true : false;
}


Tak to jest zrobione (przynajmniej na tą chwilę) ;)

Logi sprawdzałem..

Definicje
<?php
/* ./constatns.php */

/* Domyślna Ścieżka */
define( "ROOT_PATCH", str_replace( "\\", "/", dirname( __FILE__ ) ) . '/' );

/* Ścieżka do admina */
define( "ADMIN", "admin" );

/* Ścieżna do krenela */
define( "KERNEL_DIR", ROOT_PATCH . "classes" );

/* Ścieżka do admina */
define( "ADMIN_DIR", ROOT_PATCH . ADMIN . "/" );

/* Ścieżka do templatek */
define( "TEMPLATES_DIR", ROOT_PATCH . "templates/" );
?>

Użytkownik Leihto edytował ten post 03.09.2012 16:57

  • +
  • -
  • 0
Portek: Za 20zł, to ja nawet notatnika nie otworze..

Nowe portfolio. Ciekawe artykuły, ciekawe przykłady: WojtusDEV.pl

#4 Portek

    Kończymy zabawę, permanentna emerytura!

  • Przyjaciel

Reputacja: 976
Master

  • Postów:3 007
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Częstochowa
Offline

Napisano 03.09.2012 16:58

Zapisz funkcje jako "public" i sprawdź wtedy, albo dorzuć extends Controller - mogę się mylić bo nie pamiętam jak to jest, aczkolwiek przy tym ustawieniu zdaje się funkcja LoadLibs nie ładować poza kontrolerem "matką".
  • +
  • -
  • 0

serwer-1.png
IP: ts3.cserwerek.pl


#5 Leihto

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:452
  • Lokalizacja:Rabka
Offline

Napisano 03.09.2012 17:14

Niestety, ale to również nie działa :(
  • +
  • -
  • 0
Portek: Za 20zł, to ja nawet notatnika nie otworze..

Nowe portfolio. Ciekawe artykuły, ciekawe przykłady: WojtusDEV.pl





Również z jednym lub większą ilością słów kluczowych: php, oop, cms

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych