2016-04-20 6 views
0

Ich verstehe, dass $ bezieht sich auf das aktuelle Objekt.

jedoch normalerweise auf $ dieses in der Wurzel einer Datei beziehen (nicht innerhalb eines Objekts) wird einen Fehler verursachen:

PHP Fatal error: Using $this when not in object context in - on line 2 

..aber in einer Ansicht, habe ich diesen Code:

Wie findet PHP die CI-Instanz global/singleton aus der $ this-Referenz?

+0

'$ this-> last-> Ansicht (Datei) 'bedeutet' include file' –

Antwort

1

Der Code in Ihrer Ansicht wird in einen Anruf an eval oder über include in der _ci_load Methode der Loader Klasse geladen. Die Methode erhält auch die CI Instanz.

siehe ./system/core/Loader.php

gibt es die Instanz auf der Linie 920

$_ci_CI =& get_instance(); 

Laden der Ansicht in eval oder durch include on line 969

// If the PHP installation does not support short tags we'll 
// do a little string replacement, changing the short tags 
// to standard PHP echo statements. 
if (! is_php('5.4') && ! ini_get('short_open_tag') && config_item('rewrite_short_tags') === TRUE) 
{ 
    echo eval('?>'.preg_replace('/;*\s*\?>/', '; ?>', str_replace('<?=', '<?php echo ', file_get_contents($_ci_path)))); 
} 
else 
{ 
    include($_ci_path); // include() vs include_once() allows for multiple views with the same name 
} 
+0

Ich wünschte, ich könnte beide Antworten akzeptieren, aber diese ist vollständiger. –

2

Wenn $this->load->view() in einem Controller aufgerufen wird, wird die View-Datei mit dem PHP-Befehl include in die Controller-Klasse gebracht. So wird der Code der Ansicht Teil der Klasse des Controllers - wird Teil des Bereichs von $this.

+0

Ich wünschte, ich könnte dies auch akzeptieren, da es genau ist. –

Verwandte Themen