Meerdere classes (errors)
Ik ben bezig met OOP, nu heb ik een centrale file common.php. Vanuit dit bestand initieer de diverse classes.
Bijvoorbeeld
$session = new session();
$cookie = new cookie();
Als ik nu bijvoorbeeld
$cookie->validate_cookie();
Dan krijg ik ik de fout:
Fatal error: Call to a member function validate_cookie() on a non-object in
mijn common.php ziet er zo uit
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
/*
* @common.php
*
* @ignore
*/
if(!defined('tl_cms'))
{
exit;
}
/*
* Basis vars
*/
$root_path = (defined('ROOT_PATH')) ? ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
$path_length = 2;
/*
* Include benodigde bestanden
*/
require_once $root_path . 'includes/template.class.' . $phpEx;
require_once $root_path . 'includes/constants.' . $phpEx;
require_once $root_path . 'includes/session.' . $phpEx;
require_once $root_path . 'includes/cookie.' . $phpEx;
/*
* some basics
*/
$session = new session();
$cookie = new cookie();
$fc = new FrontController();
class FrontController
{
public function __construct ()
{
global $path_length;
/**
* In $_SERVER['PATH_INFO'] staat de tekst achter de bestandsnaam.
* Voorbeeldje: index.php/guestbook/showlist, dan is PATH_INFO /guestbook/showlist.
*/
if ( isset ( $_SERVER['REQUEST_URI'] ) )
{
$parts = explode ( '/', strtolower ( trim ( $_SERVER['REQUEST_URI'], '/' ) ) );
for ($i = 1; $i <= $path_length; $i++) {
array_shift($parts);
}
/**
* $parts is nu dan dus array ( [0] => 'guestbook', [1] => 'showlist' );
*/
$controller = ( current ( $parts ) ) ? array_shift ( $parts ) : 'login';
$action = (current ( $parts ) ) ? array_shift ( $parts ) : 'index';
/** De overige gegevens zouden nu opgeslagen kunnen worden in een request object. */
}
else
{
$controller = 'login';
$action = 'index';
}
$this -> dispatch ( $controller, $action );
}
public function dispatch ( $controller, $action, $vars = null )
{
if ( file_exists ( $controller . '.php' ) ) {
/** Het verwachtte bestand bestaat (guestbookcontroller.php). */
require_once ( $controller . '.php' );
$controllername = ucfirst ( $controller );
if ( class_exists ( $controllername ) ) { // bestaat GuestbookController?
if ( in_array ( $action, get_class_methods ( $controllername ) ) ) {
/** Actie bestaat ook, dus uitvoeren. */
$controllerobject = new $controllername ();
$controllerobject -> $action ($vars);
/** Actie uitgevoerd. Afsluiten! */
return;
}
}
}
/** Oh oh, het bestand, de klasse, of de methode is niet gevonden. */
$error = 'Verkeerde parameters. Ongeldige controller. Vier nul vier, dus';
$this->show_404($error);
}
function show_404($error = null)
{
global $vars;
/*
* Zelf bepalen hoe mij 404 er uit ziet
*/
$this->template = new TemplateSystem('error.phtml');
$smarty = $this->template->smarty;
$smarty->assign('error', 'Not Found');
$smarty->assign('data', 'De pagina kon niet gevonden worden. Klik <a href="http://www.eijsdentelecom.nl">hier</a> om terug te gaan.');
$this->template->display();
}
}
?>
/*
* @common.php
*
* @ignore
*/
if(!defined('tl_cms'))
{
exit;
}
/*
* Basis vars
*/
$root_path = (defined('ROOT_PATH')) ? ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
$path_length = 2;
/*
* Include benodigde bestanden
*/
require_once $root_path . 'includes/template.class.' . $phpEx;
require_once $root_path . 'includes/constants.' . $phpEx;
require_once $root_path . 'includes/session.' . $phpEx;
require_once $root_path . 'includes/cookie.' . $phpEx;
/*
* some basics
*/
$session = new session();
$cookie = new cookie();
$fc = new FrontController();
class FrontController
{
public function __construct ()
{
global $path_length;
/**
* In $_SERVER['PATH_INFO'] staat de tekst achter de bestandsnaam.
* Voorbeeldje: index.php/guestbook/showlist, dan is PATH_INFO /guestbook/showlist.
*/
if ( isset ( $_SERVER['REQUEST_URI'] ) )
{
$parts = explode ( '/', strtolower ( trim ( $_SERVER['REQUEST_URI'], '/' ) ) );
for ($i = 1; $i <= $path_length; $i++) {
array_shift($parts);
}
/**
* $parts is nu dan dus array ( [0] => 'guestbook', [1] => 'showlist' );
*/
$controller = ( current ( $parts ) ) ? array_shift ( $parts ) : 'login';
$action = (current ( $parts ) ) ? array_shift ( $parts ) : 'index';
/** De overige gegevens zouden nu opgeslagen kunnen worden in een request object. */
}
else
{
$controller = 'login';
$action = 'index';
}
$this -> dispatch ( $controller, $action );
}
public function dispatch ( $controller, $action, $vars = null )
{
if ( file_exists ( $controller . '.php' ) ) {
/** Het verwachtte bestand bestaat (guestbookcontroller.php). */
require_once ( $controller . '.php' );
$controllername = ucfirst ( $controller );
if ( class_exists ( $controllername ) ) { // bestaat GuestbookController?
if ( in_array ( $action, get_class_methods ( $controllername ) ) ) {
/** Actie bestaat ook, dus uitvoeren. */
$controllerobject = new $controllername ();
$controllerobject -> $action ($vars);
/** Actie uitgevoerd. Afsluiten! */
return;
}
}
}
/** Oh oh, het bestand, de klasse, of de methode is niet gevonden. */
$error = 'Verkeerde parameters. Ongeldige controller. Vier nul vier, dus';
$this->show_404($error);
}
function show_404($error = null)
{
global $vars;
/*
* Zelf bepalen hoe mij 404 er uit ziet
*/
$this->template = new TemplateSystem('error.phtml');
$smarty = $this->template->smarty;
$smarty->assign('error', 'Not Found');
$smarty->assign('data', 'De pagina kon niet gevonden worden. Klik <a href="http://www.eijsdentelecom.nl">hier</a> om terug te gaan.');
$this->template->display();
}
}
?>
Session en cookie.php zien er als onderstaand uit waarbij in cookie.php sessie vervangen is voor cookie
Code (php)
Heeft iemand een idee wat dit kan zijn?
Gewijzigd op 20/06/2011 18:23:15 door Jos van E
$session en $cookie worden buiten de class login geïnitieerd. Terwijl ik deze zin type realiseer ik mij wat het is.
Bij de functie stond alleen
$cookie moest er nog bij. Het werkt nu