Erste Versuche mit OOP

hachener

Grünschnabel
Hallo,

Ich habe jetzt mal mit Klassen und Objekten angefangen aber ich komme nicht wirklich weiter...

Hier mal die core.class.php
PHP:
<? 
error_reporting(E_ALL|E_STRICT);  

class Core
	{		
		function activate_Smarty()
			{
					require("./smarty/Smarty.class.php");
	
					$Smarty = new Smarty;
			}

		function choose_templ() 
			{
				if(empty($_GET['design']))
					{
						$_GET['design'] = 2;
					}

				if($_GET['design'] == 1)
					{
						$Smarty->template_dir = "./templates/default";
						$Smarty->compile_dir = "./templates_c/default";
					}

				elseif($_GET['design'] == 2)
					{
						$Smarty->template_dir = "./templates/oldcms";
						$Smarty->compile_dir = "./templates_c/oldcms";
					}
			}
	
		function display_templ()
			{
	
				var_dump($core);
	
				$Smarty->assign('site_title', 'Web 2'); //  Zeile 34 Error
				$Smarty->display('html.header.tpl');	
    			$Smarty->display('body.tpl');
				$Smarty->display('header.tpl');
				$Smarty->display('top.tpl');
			}
	}
?>

Und das ist die index.php in der ich die Objektinstanz erstelle.

PHP:
<?php

	include('core/core.class.php');

	$core = new Core;

	$core->activate_smarty();

	$core->display_templ();	

	$core->choose_templ();

?>

Allerdings bekomme ich nun folgende Error Meldung

Code:
Fatal error: Call to a member function assign() on a non-object in /var/kunden/webs/K10132-01/web2/core/core.class.php on line 37

Weiß jemand wodran das liegt?

Ich glaube das hat was mit der gültigkeit der Variabeln und Objekte zu tun ^^
 
Dein Smarty-Objekt hat nur in der Funktion activate_smarty() Gültigkeit. Versuch mal folgendes:

PHP:
class Core {        
  var $Smarty;
  function activate_Smarty() {
    require("./smarty/Smarty.class.php");
    $this->Smarty = new Smarty;
  }

  [...]
 
  function display_templ() {

    var_dump($core);

    $this->Smarty->assign('site_title', 'Web 2'); //  Zeile 34 Error
    $this->Smarty->display('html.header.tpl');    
    $this->Smarty->display('body.tpl');
    $this->Smarty->display('header.tpl');
    $this->Smarty->display('top.tpl');
  }
}
Hier weist du einer Klassenvariable das Objekt zu. Die Klassenvariable hat in der ganzen Klasse gültigkeit, während die Variable in deinem Script nur lokal gültig ist.

Alternativ kannst du natürlich auch ein Objekt oder die Referenz auf ein Objekt weitergeben:
PHP:
<?php
class Core {        
	function activate_Smarty()	{
		require("./smarty/Smarty.class.php");
		$Smarty = new Smarty;

		return $Smarty;
	}

	[...]

	function display_templ($Smarty) {

	var_dump($core);

	$Smarty->assign('site_title', 'Web 2'); //  Zeile 34 Error
	$Smarty->display('html.header.tpl');    
	$Smarty->display('body.tpl');
	$Smarty->display('header.tpl');
	$Smarty->display('top.tpl');
	}
}
?>

<?php

    include('core/core.class.php');

    $core = new Core;

    $smarty_object = $core->activate_smarty();

    [...]

    $core->choose_templ(&$smarty_object);

?>
 
Zuletzt bearbeitet:
Zurück