Rumah > Soal Jawab > teks badan
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!
为情所困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.
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();