2017-04-18 6 views
0

Ich habe eine Datei, die ich als PHP verwende, um als Konfigurationsdatei zu dienen, um Informationen zu speichern, die möglicherweise häufig geändert werden müssen. Ich kehre das Array als ein Objekt, etwa so:Versuch, die Eigenschaft von Nichtobjekt von einem zurückgegebenen Objekt zu erhalten

return (object) array(
    "host" => array(
     "URL" => "https://thomas-smyth.co.uk" 
    ), 

    "dbconfig" => array(
     "DBHost" => "localhost", 
     "DBPort" => "3306", 
     "DBUser" => "thomassm_sqlogin", 
     "DBPassword" => "SQLLoginPassword1234", 
     "DBName" => "thomassm_CadetPortal" 
    ), 

    "reCaptcha" => array(
     "reCaptchaURL" => "https://www.google.com/recaptcha/api/siteverify", 
     "reCaptchaSecretKey" => "IWouldNotBeSecretIfIPostedItHere" 
    ) 
); 

In meinem Unterricht habe ich einen Konstruktor diese zu nennen: private $ config;

function __construct(){ 
    $this->config = require('core.config.php'); 
} 

Und die Verwendung es mag:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('secret' => $this->config->reCaptcha->reCaptchaSecretKey, 'response' => $StrToken))); 

Allerdings bin ich den Fehler gegeben:

[18-Apr-2017 21:18:02 UTC] PHP Notice: Trying to get property of non-object in /home/thomassm/public_html/php/lib/CoreFunctions.php on line 21 

Ich verstehe nicht, warum dies geschieht das, was man bedenkt zurückgegeben als ein Objekt und es schien für andere Leute zu funktionieren, als ich diese Idee von einer anderen Frage bekam. Irgendwelche Vorschläge?

Antwort

1

In Ihrem Beispiel ist nur $this->config ein Objekt. Die Eigenschaften sind Arrays, so würden Sie verwenden:

$this->config->reCaptcha['reCaptchaSecretKey'] 

Das Objekt sieht wie folgt aus:

stdClass Object 
(
    [host] => Array 
     (
      [URL] => https://thomas-smyth.co.uk 
     ) 

    [dbconfig] => Array 
     (
      [DBHost] => localhost 
      [DBPort] => 3306 
      [DBUser] => thomassm_sqlogin 
      [DBPassword] => SQLLoginPassword1234 
      [DBName] => thomassm_CadetPortal 
     ) 

    [reCaptcha] => Array 
     (
      [reCaptchaURL] => https://www.google.com/recaptcha/api/siteverify 
      [reCaptchaSecretKey] => IWouldNotBeSecretIfIPostedItHere 
     ) 

) 

Um alle Objekte haben könnten Sie JSON kodieren und dann entschlüsseln:

$this->config = json_decode(json_encode($this->config)); 
+0

Was ist das stdClass-Sache? –

+0

Das ist das Objekt. Wenn Sie ein Objekt durch Casting oder aus einer Quelle erstellen, die keine Klasse angibt, gehört es zur Klasse 'stdClass'. – AbraCadaver

Verwandte Themen