프로그램에서 여러 객체를 데이터베이스에 연결하는 것이 가장 효과적이었습니다.PHP 객체 간의 MySQL 연결 공유
정적 연결 var로 클래스를 만들었습니다. 이는 하나의 연결 만 열리고 모든 개체가이를 공유 함을 의미합니다.
class Database {
public static $mysql;
function __construct() {
if (!isset(self::$mysql)) {
echo "Make static connection\n";
self::$mysql = new mysqli("localhost", "gamalert", "c45ualty", "events");
if (self::$mysql->connect_errno) {
echo "Failed to connect to MySQL: (" . $this->mysql->connect_errno . ") " . self::$mysql->connect_error;
}
echo self::$mysql->host_info . "\n";
}
}
}
정상적인 개체 버전입니다. 이것은 그것을 사용하는 각 객체에 대한 새로운 연결을 만듭니다.
class Database {
public $mysql;
function __construct() {
if (!isset($this->mysql)) {
echo "Make connection\n";
$this->mysql = new mysqli("localhost", "gamalert", "c45ualty", "events");
if ($this->mysql->connect_errno) {
echo "Failed to connect to MySQL: (" . $this->mysql->connect_errno . ") " . $this->mysql->connect_error;
}
echo $this->mysql->host_info . "\n";
}
}
내가 선호하는 옵션이 무엇인지 궁금한가요? 나중에 성능 차이를 테스트 할 계획입니다.
선호하는 버전은 정적 메서드로 전역 네임 스페이스를 오염시키는 대신 인스턴스 (두 번째)를 만드는 것입니다. –
['singleton'] (http://en.wikipedia.org/wiki/Singleton_pattern) 사용을 고려 했습니까? – Havelock
@ DanLee 당신은 그가 글로벌 네임 스페이스를 어디서 오염 시켰는가? 그는 여기에 싱글 톤 패턴을 적용하고 있습니다 (다소). 제 2의 방법은 요청 당 다중 쿼리/연결의 경우 더 많은 오버 헤드를 생성하기 때문에 MySQL 연결 재사용이 더 나은 것으로 제 1 방법을 선호합니다. –