recherche

Maison  >  Questions et réponses  >  le corps du texte

À propos des appels en chaîne en PHP

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!

天蓬老师天蓬老师2773 Il y a quelques jours887

répondre à tous(2)je répondrai

  • 为情所困

    为情所困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.

    répondre
    0
  • typecho

    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();

    répondre
    0
  • Annulerrépondre