Heim > Fragen und Antworten > Hauptteil
Bei der Verwendung von PHP-Kettenaufrufen ist ein Problem aufgetreten:
Es gibt unten eine Klasse „Site“:
<?php
class Site{
public function api(){
require('class.Api.php');
$this->api = new Api();
return $this->api;
}
}
?>
Es gibt auch eine Klasse „Api“ in „class.Api.php“:
<?php
class Api{
public function auth(){
//quiet a few
}
public function render(){
//quiet a few
}
}
?>
Instanziieren Sie mit dem folgenden Code:
$site = new Site();
Rufen Sie den folgenden Code erneut auf:
$site->api()->auth();
$site->api()->render();
Wird PHP require() wiederholen und eine neue Objekt-API erstellen? Wenn ja, kann require() durch require_once() ersetzt werden, aber wie kann man dafür sorgen, dass „$site->api()“ dasselbe Objekt zurückgibt? Danke!
为情所困2017-06-19 09:09:08
单例模式。
<?php
class Site{
public function api(){
if (!isset($this->api)) {
$this->api = new Api();
}
return $this->api;
}
}
?>
只是简单写写,还需要很多优化。
typecho2017-06-19 09:09:08
require('class.Api.php');
class Site{
protected $api;
public function getApi()
{
return $this->api;
}
public function api(){
$this->api = new Api();
}
}
?>
$site = new Site();
$site->api();
$site->getApi()->auth();
$site->getApi()->render();