Ich versuche derzeit, einige unserer Websites, die in PHP5 und Smarty 2.6 zu PHP7 und Smarty 3.1.31 waren, zu aktualisieren.variabler Bereich von php5/smarty2.6 zu php7/smarty3.1 migriert
Wir zuvor eine Website mit einem System von Klassen erstrecken andere Klassen hatten, hier ist eine vereinfachte Version davon:
class Site extends WebView
{
//functions
}
class WebView extends LandingPage
{
//functions
}
class LandingPage extends Smarty
{
function LandingPage()
{
$this->sessionInit = false;
$this->flag = array();
$this->engineVersion = '';
$this->charset = 'utf-8';
$this->content_type = 'text/html';
$this->strings = array();
$this->rtid=null;
}
}
und vor, dies, dass alle Variablen fein gearbeitet $this->variable_name
mit richtig Ort waren . Ich oculd Zugriff sie direkt mit $ this, wie $this->flag['TEST']
aus internen Klassen, oder extern könnte ich $site
, wie $site->flag['TEST']
verwenden. Nun aber ich bin immer eine Reihe von nicht definierte Eigenschaft Fehler
Notice: Undefined property: Site::$sessionInit in /var/www/html/vendor/smarty/smarty/libs/Smarty.class.php on line 1447
Notice: Undefined property: Site::$flag in /var/www/html/vendor/smarty/smarty/libs/Smarty.class.php on line 1447
Notice: Undefined property: Site::$engineVersion in /var/www/html/vendor/smarty/smarty/libs/Smarty.class.php on line 1447
Notice: Undefined property: Site::$charset in /var/www/html/vendor/smarty/smarty/libs/Smarty.class.php on line 1447
Notice: Undefined property: Site::$content_type in /var/www/html/vendor/smarty/smarty/libs/Smarty.class.php on line 1447
Notice: Undefined property: Site::$strings in /var/www/html/vendor/smarty/smarty/libs/Smarty.class.php on line 1447
Notice: Undefined property: Site::$rtid in /var/www/html/vendor/smarty/smarty/libs/Smarty.class.php on line 1447
Ich ging in die Smarty-Klasse (natürlich habe ich das nicht schreiben) und griff sich die Funktion für die Linie 1447, die die generische Setter ist:
/**
* <<magic>> Generic setter.
* Calls the appropriate setter function.
* Issues an E_USER_NOTICE if no valid setter is found.
*
* @param string $name property name
* @param mixed $value parameter passed to setter
*/
public function __set($name, $value)
{
if (isset($this->accessMap[ $name ])) {
$method = 'set' . $this->accessMap[ $name ];
$this->{$method}($value);
} elseif (in_array($name, $this->obsoleteProperties)) {
return;
} else {
if (is_object($value) && method_exists($value, $name)) {
$this->$name = $value;
} else {
trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
}
}
}
es ist generisch und überall verwendet, so würde ich davon ausgehen, dass in Ordnung ist und das Problem ist, wie ich es nenne. Was mich erreicht, ist, wie sich die Fehler auf Site::$sessionInit
beziehen, als ob die Variable Site auf der Site sein müsste, und sie wird verrückt, wenn ich versuche, sie auf der Landingpage zu setzen.
ich weiß, dass der variable bereich einige in php7 geändert hat, ist das sagen mir brauche ich setter für alle meine variablen in der website-klasse? müsste ich für jede Variable einen machen oder würde ein generischer arbeiten? (Es scheint, wie bereits Smarty ein generisches hat, die nicht funktioniert)
Wie die Klasse mit Smarty verwendet wird? Welche Funktionen nennen Sie aus der Smarty-Bibliothek und wie? – m13r