Strano Comportamento Istruzione Php "defined"

il mio index.php contiene




$config=dirname(__FILE__).'/protected/config/main.php';



il quale file (preciso: il file main.php) contiene




require ("global_config.php");



il quale (global.php) tra l’altro definisce




define("YII_DEBUG", false);

define("YII_TRACE_LEVEL", 0);



Il problema è che, sempre nella index, c’è scritto ‘di fabbrica’




defined('YII_DEBUG') or define('YII_DEBUG',true);



La cosa veramente strana è che abilitando i warning a livello paranoico mi viene detto




 Notice: Constant YII_DEBUG already defined in /var/www/httpdocs/<dominio>/protected/config/global_config.php on line 3



Da cosa dipende? Sono certo che mi sto perdendo in un bicchiere d’acqua

Inoltre inserendo




echo ( defined('YII_DEBUG') ? "true" : "false");



nella index, subito dopo il require di main.php mi viene dato un false in output, perchè ?

Dovrebbe contenere questo:


<?php

// change the following paths if necessary

$yii=dirname(FILE).’/../framework/yii.php’;

$config=dirname(FILE).’/protected/config/main.php’;

// remove the following lines when in production mode

defined(‘YII_DEBUG’) or define(‘YII_DEBUG’,true);

// specify how many levels of call stack should be shown in each log message

defined(‘YII_TRACE_LEVEL’) or define(‘YII_TRACE_LEVEL’,3);

require_once($yii);

Yii::createWebApplication($config)->run();


Perchè hai inserito quel global_config.php ?

il mio index.php è quello standard

è il file main.php (come ho scritto anche sopra) a contenere il require di global_config.php

questo perchè main.php è sotto git, mentre global_config.php no

così in produzione e in test ho lo stesso main ma diverso global_config

questo però NON risponde alla mia domanda, o sbaglio ?

Probabilmente nel tuo global_config.php definisci nuovamente YII_DEBUG.

Infatti se il tuo index.php è quello standard, prima viene definita YII_DEBUG

e poi caricato dal framework il file main.php.

Quindi nel momento in cui viene caricato il main.php, la costante YII_DEBUG

è definita. Quindi se nel global_config.php vai a ridefinirla (senza controllare

che non sia già definita), ti da quel notice.

Posta le prime 3 righe di global_config.php

ah, ok, certo, è così. è vero, davo per scontato che php eseguisse nell’ordine

require main il quale require global

defined … or define

avviamento yiiapp con main come config

per cui mi aspettavo che al momento del check defined le costanti dentro global fossero già disponibili

le prime due righe del global.php sono appunto le definizio di YII_DEBUG e YII_TRACE_LEVEL