Rumah  >  Soal Jawab  >  teks badan

Mengenai panggilan berantai dalam PHP

Saya menghadapi masalah semasa menggunakan panggilan berantai PHP:
Terdapat kelas "Tapak" di bawah:

<?php
class Site{
public function api(){
require('class.Api.php');
$this->api = new Api();
return $this->api;
}
}
?>

Terdapat juga kelas "Api" yang terletak di "class.Api.php":

<?php
class Api{
public function auth(){
//quiet a few
}
public function render(){
//quiet a few
}
}
?>

Segera dengan kod berikut:

$site = new Site();

Hubungi kod berikut sekali lagi:

$site->api()->auth();
$site->api()->render();

Adakah PHP berulang memerlukan() dan mencipta API objek baharu? Jika ya, require() boleh digantikan dengan require_once(), tetapi bagaimana untuk membuat "$site->api()" mengembalikan objek yang sama? Terima kasih!

天蓬老师天蓬老师2704 hari yang lalu813

membalas semua(2)saya akan balas

  • 为情所困

    为情所困2017-06-19 09:09:08

    Mod kes tunggal.

    <?php
    class Site{
        
        public function api(){
            if (!isset($this->api)) {
                $this->api = new Api();
            }
            return $this->api;
        }
    }
    ?>

    Ia hanya tulisan yang ringkas, tetapi ia masih memerlukan banyak pengoptimuman.

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

    balas
    0
  • Batalbalas