Maison > Questions et réponses > le corps du texte
J'ai rencontré un problème lors de l'utilisation des appels en chaîne PHP :
Il y a une classe "Site" ci-dessous :
<?php
class Site{
public function api(){
require('class.Api.php');
$this->api = new Api();
return $this->api;
}
}
?>
Il existe également une classe "Api" située dans "class.Api.php" :
<?php
class Api{
public function auth(){
//quiet a few
}
public function render(){
//quiet a few
}
}
?>
Instanciez avec le code suivant :
$site = new Site();
Appelez à nouveau le code suivant :
$site->api()->auth();
$site->api()->render();
PHP répétera-t-il require() et créera-t-il une nouvelle API d'objet ? Si tel est le cas, require() peut être remplacé par require_once(), mais comment faire en sorte que "$site->api()" renvoie le même objet ? Merci!
为情所困2017-06-19 09:09:08
Mode cas unique.
<?php
class Site{
public function api(){
if (!isset($this->api)) {
$this->api = new Api();
}
return $this->api;
}
}
?>
C'est juste une écriture simple, mais elle nécessite encore beaucoup d'optimisation.
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();