PHP 4에서는 일반적으로 var를 사용하여 변수를 선언하는 반면, PHP 5에서는 객체지향 프로그래밍(OOP)의 기능을 사용하여 데이터의 가시성, 즉 가시성과 관련된 접근성을 사용자 정의할 수 있습니다. 변수는 매우 유사하지만 다음 세 가지 유형의 가시성 수정자를 사용하여 더 나은 제어 메커니즘을 제공합니다.
공개(기본값) - 변수는 전역 범위에서 액세스하거나 수정할 수 있습니다.
보호됨--변수는 클래스 자체 및 직접 파생된(extend 문을 사용하여) 클래스 내에서만 액세스하거나 수정할 수 있습니다.
비공개--변수는 클래스 내에서만 액세스하거나 수정할 수 있습니다.
인터페이스 구현과 유사하게 프로그램에서 이러한 규칙을 위반하면 심각한 오류가 발생하며 인터페이스와 유사하게 이는 순전히 프로그래머의 편의를 위해 존재합니다. 그러나 이것이 무시할 수 있다는 의미는 아닙니다. 특정 클래스 멤버 변수의 가시성을 지정하면 외부 영향으로부터 객체 내의 데이터를 보호할 수 있습니다.
쿼리를 실행하고 결과를 반환할 수 있는 별도의 엔터티로 처리할 수 있습니다. 일부 데이터베이스 시스템에도 저장 프로시저가 있는데, 이는 쿼리문을 저장하고 해당 매개변수를 허용합니다. 그러나 MySQL은 버전 5.1 이전에는 유사한 기능을 제공하지 않았습니다.
이 글에서는 위의 두 가지 기능을 예제의 쿼리 개체에 결합하여 기본 저장 프로시저를 시뮬레이션하고 결과 포인터를 내부적으로 저장합니다. 지금은 MySqlDB 개체의 query() 함수를 호출할 수 있는 개체에서 쿼리를 실행하는 데 중점을 둡니다.
쿼리 개체에 다음 공용 함수를 정의할 수 있습니다.
__construct()--생성자는 DB 인터페이스를 구현하는 개체의 인스턴스 참조가 포함된 매개 변수를 허용합니다.
Prepare()--prepare() 함수는 쿼리의 저장 프로시저를 초기화합니다. 여기에는 하나 이상의 제한된 자리 표시자가 포함될 수 있으며, 이는 Execute() 함수에 매개 변수로 전달됩니다. 자리 표시자는 매개변수 수와 관련된 콜론, 그 뒤에 매개변수 유형과 관련된 정수 및 문자로 정의됩니다.
자리 표시자가 포함된 간단한 쿼리는 다음과 같습니다.
SELECT col1,col2 FROM table_name WHERE col1=:1I
Compile()--compile() 함수는 Execution() 함수와 유사합니다. 실제로 쿼리는 실행되지 않지만 쿼리 문자열의 모든 자리 표시자를 바꾸고 저장 프로시저의 매개 변수를 받아들입니다. , 쿼리의 컴파일된 버전을 반환합니다.
보호된 멤버
위에서 언급한 것처럼 가시성 개념을 사용하면 객체의 내부 작업을 숨기고 내부 작업에 필요한 데이터 무결성을 보호할 수 있습니다. 앞에서 설명한 대로 쿼리에서 반환된 결과 포인터는 쿼리 개체에서 파생된 특정 데이터베이스 쿼리 개체가 일부 핵심 기능에 과부하를 줄 수 있으므로 여기서는 보호된 속성으로 저장됩니다.
코드 살펴보기
이론은 충분히 설명했으니 이제 코드 작성을 시작하겠습니다. 먼저 예제 1과 같이 템플릿을 만듭니다.
예제 1: 데이터베이스 쿼리 클래스 템플릿
class DBQuery { /** *保存一个实现了DB接口对象的引用。 */ protected $db; /** *如果是一个存储过程,设为true。 */ protected $stored_procedure = false; /** *保存一个删除了所有字符串的query。 */ private $query; /** *用于在SQL中匹配引号。 */ private static $QUOTE_MATCH = "/(".*(?db = $db; } public function prepare($query) { $this->stored_procedure = true; } public function compile($args) {} public function execute($query) {} }