2010-08-24 8 views
1

J'ai un problème en php ... Je ne comprends pas complètement comment l'ensemble de la chose require() fonctionne. Ma compréhension est qu'il prend les variables membres de la classe actuelle et les rend globales dans le fichier requis. Si tel est le cas, alors pourquoi ne prend-il pas aussi les variables membres de la classe de base et les rend globales?PHP Exiger Global Scope

baseclass.php:

class BaseClass { 
var $user; 
} 

myclass.php:

class MyClass extends BaseClass { 
function doSomething() { 
    require "page.php" 
} 
} 

page.php:

$this->user // <- this is out of scope? 

Répondre

2

$this->userest disponible. Je viens de le tester.

require() fonctionne comme si le fichier requis était à la place de la commande require. Ni plus ni moins.

Dans votre exemple, le fichier requis obtient l'étendue de la fonction.

var $varname est de style ancien: En PHP 5, utiliser mieux l'un des

public $varname 
private $varname 
protected $varname 

pour déclarer des variables.

+0

A la réflexion, je supprime ma remarque "pas parfait". Bien que l'on puisse avancer que si vos méthodes sont si grandes que vous avez besoin de les mettre dans des fichiers externes, vous avez un problème de conception ... Mais ce n'est pas pertinent à la question. –

+0

très intéressant, je peux faire un print_r sur l'objet (avec succès) en dehors de l'exiger mais si je le fais à l'intérieur je n'obtiens rien. – DaveC

+0

@DaveC a 'print_r ($ this);' fonctionne bien pour moi à partir de l'include. Pouvez-vous montrer le code exact de votre fichier inclus? –

0

Je vais supposer que myclass.php a include de baseclass.php. Lorsque vous avez inclus ou requis (différence est seulement le type d'erreur qu'ils retournent), php inclut et évalue le fichier spécifié (page.php), avec les étendues de la méthode dont vous incluez le fichier (doSomething();) . Par conséquent, je ne vois pas pourquoi vous auriez une question hors champ.