> php教程 > PHP开发 > 본문

PHP의 OOP 기능을 활용하여 데이터 보호 달성 (1)

黄舟
풀어 주다: 2016-12-21 10:58:24
원래의
1273명이 탐색했습니다.

PHP 4에서는 일반적으로 var를 사용하여 변수를 선언하는 반면, PHP 5에서는 객체지향 프로그래밍(OOP)의 기능을 사용하여 데이터의 가시성, 즉 가시성과 관련된 접근성을 사용자 정의할 수 있습니다. 변수는 매우 유사하지만 다음 세 가지 유형의 가시성 수정자를 사용하여 더 나은 제어 메커니즘을 제공합니다.

공개(기본값) - 변수는 전역 범위에서 액세스하거나 수정할 수 있습니다.
보호됨--변수는 클래스 자체 및 직접 파생된(extend 문을 사용하여) 클래스 내에서만 액세스하거나 수정할 수 있습니다.
비공개--변수는 클래스 내에서만 액세스하거나 수정할 수 있습니다.

인터페이스 구현과 유사하게 프로그램에서 이러한 규칙을 위반하면 심각한 오류가 발생하며 인터페이스와 유사하게 이는 순전히 프로그래머의 편의를 위해 존재합니다. 그러나 이것이 무시할 수 있다는 의미는 아닙니다. 특정 클래스 멤버 변수의 가시성을 지정하면 외부 영향으로부터 객체 내의 데이터를 보호할 수 있습니다.
쿼리를 실행하고 결과를 반환할 수 있는 별도의 엔터티로 처리할 수 있습니다. 일부 데이터베이스 시스템에도 저장 프로시저가 있는데, 이는 쿼리문을 저장하고 해당 매개변수를 허용합니다. 그러나 MySQL은 버전 5.1 이전에는 유사한 기능을 제공하지 않았습니다.

이 글에서는 위의 두 가지 기능을 예제의 쿼리 개체에 결합하여 기본 저장 프로시저를 시뮬레이션하고 결과 포인터를 내부적으로 저장합니다. 지금은 MySqlDB 개체의 query() 함수를 호출할 수 있는 개체에서 쿼리를 실행하는 데 중점을 둡니다.

쿼리 개체에 다음 공용 함수를 정의할 수 있습니다.

__construct()--생성자는 DB 인터페이스를 구현하는 개체의 인스턴스 참조가 포함된 매개 변수를 허용합니다.

Prepare()--prepare() 함수는 쿼리의 저장 프로시저를 초기화합니다. 여기에는 하나 이상의 제한된 자리 표시자가 포함될 수 있으며, 이는 Execute() 함수에 매개 변수로 전달됩니다. 자리 표시자는 매개변수 수와 관련된 콜론, 그 뒤에 매개변수 유형과 관련된 정수 및 문자로 정의됩니다.

자리 표시자가 포함된 간단한 쿼리는 다음과 같습니다.

excute()--execute() 함수가 쿼리를 실행합니다. prepare() 함수에 의해 저장 프로시저로 조기에 초기화된 경우 전달된 모든 매개변수는 저장 프로시저의 실행 매개변수로 사용됩니다. 그렇지 않으면 첫 번째 매개변수는 쿼리 텍스트로만 사용됩니다. Execute() 함수는 쿼리를 실행한 후 결과를 반환합니다.
SELECT col1,col2 FROM table_name WHERE col1=:1I
로그인 후 복사

Compile()--compile() 함수는 Execution() 함수와 유사합니다. 실제로 쿼리는 실행되지 않지만 쿼리 문자열의 모든 자리 표시자를 바꾸고 저장 프로시저의 매개 변수를 받아들입니다. , 쿼리의 컴파일된 버전을 반환합니다.

보호된 멤버

위에서 언급한 것처럼 가시성 개념을 사용하면 객체의 내부 작업을 숨기고 내부 작업에 필요한 데이터 무결성을 보호할 수 있습니다. 앞에서 설명한 대로 쿼리에서 반환된 결과 포인터는 쿼리 개체에서 파생된 특정 데이터베이스 쿼리 개체가 일부 핵심 기능에 과부하를 줄 수 있으므로 여기서는 보호된 속성으로 저장됩니다.

코드 살펴보기

이론은 충분히 설명했으니 이제 코드 작성을 시작하겠습니다. 먼저 예제 1과 같이 템플릿을 만듭니다.

예제 1: 데이터베이스 쿼리 클래스 템플릿

위는 데이터 보호를 위해 PHP의 OOP 기능을 사용하는 내용입니다. (1) 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!
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)
{}
}
로그인 후 복사

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿