Archief - PHP: probleem met declaren van variables in class.

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Bram

Legacy Member
Howdie,

ik ben wat aan het prutsen met OO PHP en Smarty enzo, en was bezig een eigen class te schrijven, die tot nu toe goed werkte, maar ik kom nu wat problemen tegen.

Ik was enkele variabelen aan het instellen in het begin van m'n class, maar ik blijf maar vreemde errors krijgen...
PHP:
1. <?php
2. require(ROOT.'/libs/Smarty.class.php');
3. class Modular extends Smarty {
4. 
5. 	var $root = $_SERVER['DOCUMENT_ROOT'];
6. 	var $smarty = null;
7.	var $modulesDir = $root.'/admin/modules/';
8.	var $uModules = array();
...
Ik heb in m'n index.php define('ROOT', $_SERVER['DOCUMENT_ROOT']); staan, maar als ik ROOT gebruikte bij var $modulesDir dan kreeg ik een unexpected '.' warning, als ik nu dit gebruik krijg ik de warning unexpected T_VARIABLE over lijn 5 (de eerste variabele).

Iemand een idee of ik iets verkeerd doe?

RedCrew

Legacy Member
je moet ze eerst globaal maken

kijk eens naar de functie global

Bram

Legacy Member
php.net zei:
Sorry, but the function global is not in the online manual.

Mor ik google wel ff round.

edit: met google vind ik dingen die terugslaan op functions, het gaat hier wel om een class, of is dat hetzelfde?

Tyfius

Legacy Member
killgore zei:
sinds wanneer is $_SERVER niet globaal :x?
Die wel, maar zijn ROOT define niet, en daar heeft hij een probleem mee.

Het verbaasd me dat je geen foutmelding krijgt op die require() want voor je <?php definieer je nergens ROOT. Die staat in je index.php zeg je, maar hoe roep je dit allemaal op. Als jij je klasse include in index.php zou het moeten werken, als jij een verwijzing doet naar deze klasse (bvb door te linken naar modular.php) dan kent die ROOT niet.

Bram

Legacy Member
mja, ik heb het probleem ondertss als volgt opgelost.
hier is m'n volledig php bestand. Ik zit namelijk nu met een nieuw probleem.
PHP:
<?php
require(ROOT.'/libs/Smarty.class.php');

if(!defined('ROOT')) {
	define('ROOT', $_SERVER['DOCUMENT_ROOT']);
}

class Modular extends Smarty {
	
	var $modulesDir = ROOT.'/admin/modules';
	var $uModules = array();
	
	//Construct function, starting Smarty 
	public function __construct() {
	
		$this->root = $_SERVER['DOCUMENT_ROOT'];
	}
	
	public function getModules() {
		if ($handle = opendir($this->modulesDir) || die("Could not open Modules directory")) {
			while (false !== ($file = readdir($handle))) {
				if($file != "." && $file != ".." && !is_dir($this->modulesDir.$file)) {
					
					$Module = fopen($this->modulesDir.$file, 'r');
					$modContent = fread($Module, 26);
					fclose($Module);
					
					
					$this->uModules[] = $file;
				}
			}
			closedir($handle);
		}
		return $this->uModules;
	}

/* end class */}
?>
ik had die getModules function eerst rechstreeks in m'n php gezet, die werkte perfect, maar nu krijg ik de error 'Warning: readdir(): supplied argument is not a valid Directory resource'.

Zoals ge ziet heb ik m'n variables nu gewoon ingeteld in m'n __construct, maar de PHP manual zegt dat da alleen hoeft voor PHP4, en 5.X.X staat op m'n server... Of zou die error veroorzaakt zijn door het feit dat die ROOT nie herkend werd, en da em dan em gewoon miste van welke lijn het was?

Zou het iets te maken kunnen hebben met het feit dat de php safe mode nog aan staat? Ik heb hier nog al problemen mee gehad...

RedCrew

Legacy Member
Ja nu zie ik het pas te goei (ik was dus fout)
mijn excuses het ging dus om
require(ROOT.'/libs/Smarty.class.php');
maar dat lag buiten de class
is het bestand waar root gedeclareerd is ook geïnclude ?

Bram

Legacy Member
ik heb ROOT nog eens gedefineerd bovenaan Modular.class.php. die wordt ook geinclude in index.php

killgore

Legacy Member
Tyfius zei:
Die wel, maar zijn ROOT define niet, en daar heeft hij een probleem mee.

Het verbaasd me dat je geen foutmelding krijgt op die require() want voor je <?php definieer je nergens ROOT. Die staat in je index.php zeg je, maar hoe roep je dit allemaal op. Als jij je klasse include in index.php zou het moeten werken, als jij een verwijzing doet naar deze klasse (bvb door te linken naar modular.php) dan kent die ROOT niet.

constanten zijn in php ook globaal. de fout was dat hij zijn default-declaratie liet afhangen van een variabele, wat bij mijn weten niet mag.

Tyfius

Legacy Member
Doe eens een print van uw $this-modulesDir en zie wat die bevat.
Daarnaast, die $this-root bestaat niet, en wordt nergens gebruikt. Vrij nutteloos dus.

Bram

Legacy Member
dus het had dit moeten zijn
PHP:
class Modular extends Smarty {
	
	var $modulesDir = null;
	var $uModules = array();
	
	//Construct function, starting Smarty 
	public function __construct() {
	
		$this->modulesDir = ROOT.'/admin/modules';
		$this->config_dir = ROOT.'/libs/configs/';
	}
in plaats van
PHP:
class Modular extends Smarty {
	
	var $modulesDir = ROOT.'/admin/modules';
	var $uModules = array();
	
	//Construct function, starting Smarty 
	public function __construct() {
	
		$this->config_dir = ROOT.'/libs/configs/';
	}
Iemand een idee waarom ik wel de die modulesDir kan openen, maar niet kan uitlezen of sluiten?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan