전통적인 스타일에 따라 MySQL 데이터베이스에 액세스하는 방법은 다음과 같습니다.
- // 서버에 연결하고 데이터베이스를 선택합니다.
-
$conn = mysql_connect("localhost", "사용자", "비밀번호");
- mysql_select_db("데이터베이스");
-
// SQL 쿼리 실행
-
$type = $_POST['유형'];
-
$sql = " SELECT * FROM `table` WHERE `type` = {$type}";
-
$result = mysql_query($sql);
-
//결과 인쇄
-
동안($row = mysql_fetch_array($result, MYSQL_ASSOC))
-
{
-
foreach($row as $k => $v)
-
인쇄 "{$k}: {$v}n";
- }
- // 결과 세트를 해제하고 연결을 종료합니다
- mysql_free_result($result);
- mysql_close ($conn);
코드 복사코드 데이터베이스를 독립적으로 만들기 위해, 즉 코드 조각이 동시에 여러 데이터베이스에 적용 가능하도록 하기 위해(예를 들어 위 코드는 MySQL에만 적용 가능함) PHP는 공식적으로 PDO를 설계했습니다. 또한 PDO는 다음과 같은 더 많은 기능을 제공합니다. ?객체 지향 스타일 인터페이스?SQL 사전 컴파일(준비), 자리 표시자 구문?특별한 성능 최적화로 공식 권장 사항에 따른 실행 효율성 향상?대부분의 SQL 데이터베이스를 지원하며 데이터베이스 변경 시 코드를 변경할 필요가 없습니다PDO를 사용하여 구현한 위 코드는 다음과 같습니다.
- // 데이터베이스에 연결
-
$conn = new PDO("mysql:host=localhost ;dbname=database" , "사용자", "비밀번호");
-
// 사전 컴파일된 SQL, 바인드 매개변수
-
$query = $conn->준비("SELECT * FROM `table` WHERE `type` = :type");
-
$query-> bindParam("유형", $_POST['type']);
-
// 쿼리를 실행하고 인쇄합니다. 결과
-
foreach($query->실행() 다음과 같이 $row)
-
{
-
foreach($row as $k => $v)
-
>"{$k}: { $v}n"; }
-
코드 복사
PDO는 공식적으로 권장되는 방식이며, 특별한 요구 사항이 없다면 PDO를 배워서 사용하는 것이 좋습니다.
하지만 만약 MySQL 고유의 고급 기능을 사용해야 하는 경우 MySQLi를 사용해 볼 수도 있습니다. 왜냐하면 PDO에는 여러 데이터베이스에서 동시에 사용하기 위한 MySQL 고유 기능이 포함되어 있지 않기 때문입니다.
MySQLi는 향상된 MySQL용 인터페이스로, 프로세스 지향 및 객체 지향 인터페이스를 모두 제공하며 현재 권장되는 MySQL 드라이버이기도 합니다. 이전 C 스타일 MySQL 인터페이스는 종료됩니다. 앞으로는 기본적으로. 위 두 코드에 비해 MySQLi의 사용법에는 새로운 개념이 많지 않습니다. 여기서는 PHP 공식 웹사이트 문서를 참조하세요. 참고: http://www.php.net/manual/en/mysqli.quickstart.php
유형 제약유형 제약을 통해 매개변수 유형을 제한할 수 있지만 이 메커니즘은 현재 클래스, 호출 가능(실행 가능 유형) 및 배열(배열)에만 적용되며 문자열 및 int에는 적용되지 않습니다.
- // 첫 번째 매개변수를 MyClass로, 두 번째 매개변수를 실행 가능 유형으로, 세 번째 매개변수를 배열로 제한합니다.
-
함수 MyFunction(MyClass $a, 호출 가능 $b, 배열 $c)
-
{
-
// ...
-
}
코드 복사
PHP5.2
(2006-2011)JSON은 json_encode(), json_decode()를 포함하여 지원합니다. 및 기타 기능, JSON은 웹 분야에서 매우 일반적으로 사용되는 데이터 교환 형식이며 JS에서 직접 지원할 수 있습니다. JSON은 실제로 JS 구문의 일부입니다. JSON 시리즈 함수는 PHP의 배열 구조를 JSON 문자열로 변환할 수 있습니다:
-
$array = 배열 ("키" => "값 ", "배열" => 배열( 1, 2, 3 , 4));
-
$json = json_encode($array);
-
echo "{ $json}n" ;
-
$object =json_decode ($json);
-
print_r($object);
코드 복사
출력:
-
{ "키":"값","배열": [1,2,3,4]}
-
stdClass 객체
-
(
-
[키] => 값
-
[배열] => > 배열
[-
0]
-
=> 1 [1]
-
=> 2 [2 ]
-
= > 3 > => 4
-
> )코드 복사json_decode()는 기본적으로 배열이 아닌 객체를 반환한다는 점에 주목할 가치가 있습니다. 배열의 경우 두 번째 매개변수를 true로 설정해야 합니다.PHP5.3
(2009-2012)PHP5.3은 매우 대규모 업데이트로 많은 새로운 기능을 추가했으며 이전 버전과 호환되지 않는 일부 수정 사항도 적용했습니다. 더 이상 사용되지 않는 기능다음 기능은 더 이상 사용되지 않습니다. 구성 파일에서 활성화하면 PHP가 경고를 발행합니다. 글로벌 변수 등록php.ini(register_globals)의 옵션입니다. 활성화하면 모든 양식 변수($_GET 및 $_POST)가 전역 변수로 등록됩니다. 다음 예를 살펴보세요.
-
if(isAuth())
-
$authorized = true;
-
if($authorized)
-
include( "page.php");
코드 복사
이 코드는 verify 에서 $authorized를 true로 설정한 다음 $authorized 값을 기준으로 페이지 표시 여부를 결정합니다. 그러나 $authorized는 미리 false로 초기화되지 않으므로,register_globals가 켜져 있으면 /auth.php?authorized=1을 방문하여 이 변수의 값을 정의하고 인증을 우회할 수 있습니다. 이 기능은 역사적 문제로 PHP4.2에서는 기본적으로 꺼져 있었고 PHP5.4에서는 제거되었습니다. Magic Quotes는 php.ini의 Magic_quotes_gpc 옵션에 해당합니다. 이 기능도 역사적 문제이며 PHP5.4에서 제거되었습니다. 이 기능은 모든 사용자 입력을 이스케이프 처리하는데, 이는 1장에서 사용자 입력 이스케이프에 대해 언급한 바 있습니다. 그러나 PHP는 어떤 입력이 SQL로 들어갈지, 어떤 입력이 Shell로 들어갈지, 어떤 입력이 HTML로 표시될지 모르기 때문에 이러한 이스케이프는 여러 번 혼란을 야기할 것입니다. 안전 모드많은 웹 호스팅 제공업체에서는 여러 사용자를 격리하기 위해 안전 모드를 사용하지만, 안전 모드에는 많은 문제가 있습니다. 예를 들어 일부 확장 프로그램은 안전 모드에 따라 권한을 제어하지 않습니다. PHP는 공식적으로 권한 격리를 위해 운영 체제 메커니즘을 사용하여 웹 서버가 다양한 사용자 권한으로 PHP 인터프리터를 실행할 수 있도록 권장합니다. 1장의 최소 권한 원칙을 참조하세요. 익명기능 클로저라고도 하며 콜백 함수 및 기타 목적을 위해 이름 없는 함수를 임시로 생성하는 데 자주 사용됩니다.
-
$func = 함수($arg)
-
{
-
$arg;
};-
- $func
(-
"Hello World");코드 복사
위 코드는 익명 함수를 정의합니다. $func에 할당합니다.
익명 함수를 정의하는 데는 function 키워드가 여전히 사용되지만 함수 이름은 생략되고 바로 매개변수 목록이 되는 것을 볼 수 있습니다. 그런 다음 $func에 저장된 익명 함수를 호출합니다. 익명 함수는 use 키워드를 사용하여 외부 변수를 캡처할 수도 있습니다. function arrayPlus-
($배열, $num)
{-
array_walk
(-
$array, 함수(&$v) 사용($num ){ $v
+=-
$num;
});-
}-
코드 복사
위 코드는 지정된 숫자( $num)를 추가하는 arrayPlus() 함수(익명 함수가 아님)를 정의합니다.
arrayPlus() 구현에서는 배열의 각 항목에 대해 콜백 함수를 실행하는 array_walk() 함수를 사용하는데, 이것이 우리가 정의한 익명 함수입니다. 익명 함수의 매개변수 목록 다음에 use 키워드를 사용하여 익명 함수 외부의 $num을 함수에 캡처하여 얼마만큼 추가해야 하는지 알 수 있습니다. 마법의 메소드: __invoke(), __callStatic()PHP의 객체 지향 시스템은 존재하지 않는 속성이나 메소드에 액세스할 때 매직 메소드를 트리거하는 등 다른 언어와 유사한 "오버로딩"을 구현하기 위해 여러 가지 "매직 메소드"를 제공합니다. 익명 함수가 추가되면서 PHP는 새로운 매직 메소드인 __invoke()를 도입합니다.이 매직 메소드는 함수가 호출될 때 객체를 호출로 사용합니다. 호출됩니다:
-
class A
-
{
-
공개 함수 __invoke($str)
-
{
-
인쇄 "A::__invoke(): {$str}";
-
}
-
}
-
$a = 신규아;
-
$a("안녕하세요 World");
코드 복사
출력은 다음과 같습니다. - A::__invoke(): 안녕하세요 World
코드 복사
__callStatic()은 존재하지 않는 정적 메서드가 호출될 때 호출됩니다. 네임스페이스PHP의 네임스페이스는 유례가 없는 매우 고통스러운 구문을 가지고 있습니다.
- php
- // 네임스페이스 구분 기호는 백슬래시이며 선언문은 파일의 첫 번째 줄에 있어야 합니다.
- // 네임스페이스에는 모든 코드가 포함될 수 있지만 **클래스, 함수 및 상수**만 네임스페이스의 영향을 받습니다.
- 네임스페이스 XXOOTest;
- // 이 클래스의 정규화된 이름은 XXOOTestA입니다. 여기서 첫 번째 백슬래시는 전역 네임스페이스를 나타냅니다.
- 클래스아{}
- // 기존 파일에 두 번째 네임스페이스를 정의할 수도 있으며, 다음 코드는 OtherTest2에 위치합니다.
- 네임스페이스 기타Test2;
-
- // 다른 네임스페이스의 개체 인스턴스화:
- $a = 신규 XXOOTestA;
- 클래스B{}
- // 중괄호를 사용하여 세 번째 네임스페이스를 정의할 수도 있습니다
- 네임스페이스 기타
- // 하위 네임스페이스에서 객체 인스턴스화: $b
- = new 테스트2B;
-
- // 다른 네임스페이스에서 이름을 가져와서 이름을 바꿉니다.
- // 클래스만 가져올 수 있고 함수와 상수는 가져올 수 없습니다.
- 사용 XXOOTestA ClassA
- }
코드 복사
네임스페이스 구문에 대한 자세한 내용은 공식 웹사이트 [참고]를 참조하세요.네임스페이스는 클래스 구현 파일을 자동으로 로드하기 위해 autoload와 함께 사용되는 경우가 많습니다. - spl_autoload_register(
- >$class) { spl_autoload(str_replace
- ("\", "/", $class)); 🎜>);
코드 복사- 클래스를 인스턴스화할 때 클래스의 정규화된 이름인 XXOOTestA 자동 로드 함수에 전달되면 자동 로드 함수는 클래스 이름의 네임스페이스 구분 기호(백슬래시)를 슬래시로 바꾸고 해당 파일을 포함합니다.
이를 통해 클래스 정의 파일을 계층적으로 저장하고 요청 시 자동 로딩이 가능합니다. - 참고: http://www.php.net/manual/zh/언어.namespaces.php
후기 정적 바인딩
PHP의 OPP 메커니즘에는 다음 코드와 같은 상속 및 가상 함수와 유사한 기능이 있습니다.
class A {
- 공개 함수
- callFuncXXOO()
- 🎜>인쇄 $this-> ;funcXXOO();
- }
- >기능 funcXXOO() >복귀
- "A::funcXXOO()";
-
- } }
- 클래스B
- 확장A {
- 공개
- 기능 funcXXOO()
-
- { 반환 "B::funcXXOO"
- ;
- } >$b =
- 신규 B;
- $b->callFuncXXOO ();
- 코드 복사출력은 다음과 같습니다.
-
B::
- funcXXOO
-
코드 복사보시다시피 A에서 $this->funcXXOO()를 사용하면 "가상 함수" 메커니즘이 반영되며 실제로 호출되는 것은 B::funcXXOO()입니다. 단, 모든 함수를 정적 함수로 변경하는 경우:
-
class A
-
{
-
정적 공개 기능 callFuncXXOO()
-
🎜> 자신
- ::funcXXOO(); }
-
정적
- 공개
- 기능 funcXXOO () {
- 반품 "A::funcXXOO()"
- ; }
- }
-
클래스
- B연장
- A {
- 정적 공개
- 함수 funcXXOO() 🎜> "B::funcXXOO";
-
}
- }
$b -
=
신규-
B;
- $b
->-
callFuncXXOO ();코드 복사상황은 그다지 낙관적이지 않으며 결과는 다음과 같습니다.
-
A::funcXXOO()
코드 복사
self의 의미는 원래 "현재 클래스"이므로 PHP5.3은 static 키워드에 새로운 기능을 제공합니다: 후기 정적 바인딩:
- 클래스 A
{
정적 -
공개
함수-
callFuncXXOO()
- }
// ...-
}-
// ... 코드를 복사하세요
-
예상대로 출력됩니다:
B-
::
funcXXOO-
코드 복사
-
Heredoc 및 NowdocPHP5.3에서는 Heredoc 및 Nowdoc가 일부 개선되었습니다. , 둘 다 PHP 코드에 큰 문자열을 포함하는 데 사용됩니다.
- Heredoc은 큰따옴표로 묶인 문자열처럼 동작합니다.
-
$name =
"내 이름";
echo - <<< 텍스트
내 이름
은 "{$name}" .- 텍스트;코드 복사Heredoc은 세 개의 왼쪽 꺾쇠괄호로 시작하고 그 뒤에 식별자(TEXT)가 오고 동일한 상단 공백의 식별자로 끝납니다(들여쓰기 불가). 은 변수를 삽입할 수 있는 큰따옴표 문자열과 같습니다. Heredoc은 함수 매개변수 및 클래스 멤버 초기화에도 사용할 수 있습니다:
- var_dump(<<< ;EOD
- 안녕하세요 세계
- EOD
- );
- 클래스A
- {
- const xx = <<< EOD
- 안녕하세요 세계
- EOD;
- 공개 $oo = < << EOD
- 안녕하세요 세계
- EOD;
- }
코드 복사
Nowdoc는 작은따옴표로 묶인 문자열처럼 동작하며 여기에 변수를 포함할 수 없습니다. Heredoc과의 유일한 차이점은 세 개의 왼쪽 꺾쇠 괄호 뒤의 식별자를 작은따옴표로 묶어야 한다는 것입니다. - $name = "내 이름";
- echo <<< 'TEXT'
- 내 이름 은 "{$name}"입니다.
- TEXT;
코드 복사
출력: - 내 이름 은 "{$name}"입니다.
코드 복사
const를 사용하여 상수 정의PHP5.3은 const를 사용하여 전역 네임스페이스와 클래스 모두에서 상수를 정의하는 것을 지원합니다. 이전 스타일: - 정의("XOOO" , "값");
코드 복사
새로운 스타일: - const XXOO = "값";
코드 복사
const 형식은 상수에만 적용되며 런타임에만 평가할 수 있는 표현식에는 적용되지 않습니다. - // 정답
- const XXOO = 1234;
- // 오류
- const XXOO = 2 * 617;
코드 복사
삼항 연산자 약어 이전 스타일: - echo $a ? $a : "값 없음";
코드 복사
은 다음과 같이 축약될 수 있습니다: - echo $a ?: "값 없음" ;
코드 복사
즉, 삼항 연산자의 두 번째 부분이 생략되면 첫 번째 부분이 대체됩니다. 기본적으로 . PharPhar는 원래 Pear의 라이브러리였으며 나중에 PHP5.3에서 C 확장으로 다시 작성되어 PHP에 내장되었습니다. Phar는 여러 .php 스크립트(다른 파일도 패키지할 수 있음)를 .phar 압축 파일(일반적으로 ZIP 형식)로 패키징하는 데 사용됩니다. 목적은 Java의 .jar을 모방하는 것입니다. 아니, 목적은 PHP 애플리케이션 게시를 더 편리하게 만드는 것입니다. 또한 디지털 서명 확인과 같은 기능도 제공합니다. .phar 파일은 .php 파일과 마찬가지로 PHP 엔진에서 해석하고 실행할 수 있습니다. 동시에 이와 같은 코드를 작성하여 코드를 포함(필수)할 수도 있습니다. .phar: - require("xxoo.phar");
- 요구("phar://xxoo.phar/xo/ox.php");
코드 복사
자세한 내용은 공식 홈페이지 [참고]를 참조하세요.참고: http://www.php.net/manual/en/phar.using.intro.php
PHP5.4(2012-2013)Short Open TagShort Open Tag는 PHP5.4부터 항상 사용 가능합니다. 여기에서는 PHP 시작 태그와 종료 태그와 관련된 문제에 중점을 두겠습니다. 즉, - php
- // 코드...
- ?>
코드 복사
보통은 위 형식에 추가로 축약형도 있습니다: - /* Code... */ ?>
코드 복사
- php echo $xxoo;?>
코드 복사
약어: - = $xxoo;?>
코드 복사
이 약어를 Short Open Tag라고 하며, PHP5.3에서는 기본적으로 활성화되어 있으며 PHP5.4에서는 항상 사용할 수 있습니다. 이 단축 형식을 사용하면 HTML에 PHP 변수를 삽입하는 데 매우 편리합니다. 순수 PHP 파일(예: 클래스 구현 파일)의 경우 PHP는 공식적으로 상단 상자에 시작 태그를 작성하고 종료 태그를 생략할 것을 권장합니다. 이렇게 하면 전체 PHP 파일이 출력 없이 PHP 코드가 됩니다. 그렇지 않으면 파일을 포함시킨 후 헤더와 쿠키를 설정할 때 문제가 발생할 수 있습니다. [참고].참고: 헤더와 쿠키는 콘텐츠가 출력되기 전에 전송되어야 합니다. 배열 약어정말 편리한 기능이에요!
- //원래 배열 쓰기
-
$arr = 배열("키" => "값", "키2" => "값2" ; >
[-
"키"
=>-
"값" , "key2" => "value2"];코드 복사특성소위 특성은 "구성 요소"입니다. 상속을 대체하는 메커니즘에 사용됩니다. PHP에서는 다중 상속이 불가능하지만 클래스는 여러 특성을 포함할 수 있습니다.// 특성은 개별적으로 인스턴스화할 수 없으며 클래스에만 포함될 수 있습니다
특성 SayWorld
{ 공개-
기능
안녕하세요-
()
-
{ echo '세상!';
-
}
-
}
-
수업
-
MyHelloWorld
- {
-
// Will 회원이 SayWorld에 포함됩니다.
사용-
SayWorld
;-
}-
$xxoo =
- new
MyHelloWorld- ();
-
// sayHello() 함수는 SayWorld 구성 요소 $xxoo->sayHello()에 있습니다. >
- 코드 복사특성에는 여러 특성 포함, 충돌 해결, 액세스 권한 수정, 기능 별칭 기능 설정 등 많은 마법의 기능도 있습니다. .
- 특성에는 특성도 포함될 수 있습니다. 지면의 제약으로 인해 일일이 예시를 드릴 수 없습니다. 자세한 내용은 공식 홈페이지 [참고]를 참조하세요. 참고: http://www.php.net/manual/zh/언어.oop5.traits.php
내장 웹 서버PHP에는 5.4부터 경량 웹 서버가 내장되어 있으며 동시성을 지원하지 않으며 개발 및 디버깅 환경에 적합합니다. 개발환경에서 사용하면 참으로 편리합니다.
-
php -S 로컬 호스트:8000
코드 복사
이렇게 하면 현재 디렉터리에 웹 서버가 설정되며 http://localhost:8000/을 통해 액세스할 수 있습니다. localhost가 청취 IP인 경우 8000은 청취 포트이며 사용자가 직접 수정할 수 있습니다. 많은 애플리케이션에서 URL 재작성이 수행되므로 PHP는 라우팅 스크립트를 설정하는 기능을 제공합니다.
-
php -S 로컬 호스트:8000 인덱스.php
코드 복사
이렇게 하면 모든 요청이 index.php에 의해 처리됩니다. 중단점 디버깅을 위해 XDebug를 사용할 수도 있습니다. 수정된 세부정보PHP5.4에는 정적 메서드에 동적으로 액세스하는 새로운 방법이 추가되었습니다.
-
$func = }();
- 코드 복사인스턴스화 중에 클래스 멤버에 액세스하는 기능을 추가합니다. (
new
MyClass
)->xxoo -
();코드 복사함수 반환 배열의 멤버 액세스 분석에 대한 지원이 추가되었습니다(이 작성 방법은 이전에 사용된 버전은 오류를 보고합니다.): print
func
()[0
] ;
-
코드 복사PHP5.5(2013년 이후)수율
yield 키워드는 함수가 반복자를 반환해야 할 때 값을 하나씩 반환하는 데 사용됩니다.
함수
번호10() {- for
(-
$i =
-
1; $i <= 10; $i += 1) 수익률 $i;
-
}복사 코드
이 함수의 반환 값은 배열입니다. -
list()는 foreach에 사용됩니다.list()를 사용하여 foreach에서 중첩 배열을 구문 분석할 수 있습니다.
-
$array = [
-
[1, 2 , 3],
-
[ 4 , 5, 6],
-
];
-
foreach ($array 목록($a , $b, $c))
-
에코 "{$a} {$b} {$c}n";
코드 복사
결과:
-
1 2 3
-
4 5 6
코드 복사
세부 수정mysql 기능을 사용하지 않는 것이 좋으며, PDO나 MySQLi를 사용하는 것을 권장합니다. 이전 글을 참고하세요. 더 이상 Windows XP를 지원하지 않습니다. MyClass::class를 사용하여 클래스의 정규화된 이름(네임스페이스 포함)을 가져올 수 있습니다. empty()는 표현식을 매개변수로 지원합니다. try-catch 구조에 finally 블록이 추가됩니다. PHP5.6더 나은 상수상수를 정의할 때 이전에 정의된 상수를 사용한 계산을 허용합니다.
-
const A = 2;
-
const B = A + 1 ;
-
클래스C
-
{
-
const STR = "안녕하세요";
-
const STR2 = 자신::STR + ", 세계" ;
-
}
코드 복사
상수를 함수로 허용 매개변수 기본값: -
function func($arg = C::STR2)
코드 복사
더 나은 가변 기능 매개변수func_get_args() 대신 이 사용됩니다
-
function add(...$args )
-
{
-
$result = 0;
-
>as $arg) $result += $arg
- ; 반환 $result
- ; }
-
코드 복사동시에 함수 호출 시 배열을 함수 매개변수로 확장할 수 있습니다.
$arr
=
- [2, 3] ;추가(1
- ,... $arr) 🎜>//결과는 6코드 복사 네임스페이스
- 네임스페이스는 상수와 함수를 지원합니다:네임스페이스
이름
스페이스 {
- const FOO = 42
- ; 함수 f() {
- echo __FUNCTION__."n"; } }
- 네임스페이스 {
-
- 사용 const 이름
- SpaceFOO ; 사용 기능 이름
- Spacef; echo FOO."n";
-
f
- (); }
-
이상에서는 관련 내용을 포함하여 PHP52~56의 새로운 기능에 대한 자세한 설명을 소개하였습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.