개요
PHP 4.0
└ PHP 3.0 + 프레임워크(Zend 엔진)
└ 모듈화 및 웹 서버 인터페이스 부문이 추가되었다.
└ 이식성 측면이 상향되었다.
PHP 5.0
└ 객체지향 문법이 추가되었다. ( PHP 3.0/4.0 버전에서는 Class를 만들고, 상속받는 기능 외엔 없었음)
└ xml 지원이 강화되었다.
└ SQLite 등 sql이 확장되었다.
└ Tidy 확장을 지원하였다. (이를 통해 HTML 문서를 표준에 맞게 관리할 수 있음)
PHP의 장점
① 무료다. (고급 기술은 유료지만..)
② 플랫폼에 독립적이다.
③ PHP 내부 소스 코드를 수정할 수 있다(고수용)
④ 웹 개발에 적합하다(C, Java는 애시당초 웹 개발 용이 아니였다.)
⑤ 에러를 무료로 해결이 가능하다(?)
⑥ 대중적이다.
⑦ 쉽다.
실행 구조
└ Client가 요청한 파일이 HTML일 경우, 그대로 보내준다
└ Client가 요청한 파일이 PHP일 경우, PHP 엔진을 통해 해당 파일의 PHP 스크립트를 실행한다.
php.ini
└ PHP의 실행 환경 설정 파일
데이터를 출력하는데에는 echo, print가 있다.
둘은 기본적으론 같지만, echo는 언어 구조이며, print는 함수다.
따라서 echo(print "b")는 에러가 나지 않지만[b1], print(echo "a")는 에러가 난다.
echo (print("b")) ;
// print(echo "a"); //ERROR!
선언 방식
PHP를 선언하는 방법은 세 가지가 있다.
<?
// 일반적, 값 x
?>
<?=
// 값
?>
<?php
// 1번과 동일
?>
$asdf = "Conative";
안녕하세요<?= $asdf?>님.<br><br>
변수 Type에는 Integer, Float, String, Boolean, Null, Array, Object가 있고, 특수한 경우 Resource가 있다.
String에서, "" 안에 "를 넣고 싶다면, \"를 써도 되지만, HERE docs문법을 사용해도 된다.
HERE docs 문법
$str = <<<hello //이때, hello는 변수명이다.
asdf
"fdsa"
asdf
"qwert"
hello; // 반드시 가장 앞에 해당 변수명을 입력해야 한다.
echo $str."<br>";
강제 형변환 (괄호 사용)
$a = "1";
$b = 2;
echo $a + $b."ff";
$c = (double)($b + 0.1);
echo $c."<br>";
메모리 관리법
PHP에서 메모리를 관리하는 방법은, 변수에 Null을 대입하거나, unset을 사용하는 방법이 있다.
unset($c); // unset 사용
//$c = null; // null 대입
echo "empty 값 : ".empty($c)."<br>"; // 없으면 true
echo "isset 값 : ".isset($c)."<br>"; // 있으면 true
echo "is_null 값 : ".is_null($c)."<br>"; //unset시 err, null 대입 시 true.
if(isset($c)) echo "ok!"; // 변수 할당이 되어있는지 체크함
else echo "no!";
주소 참조 - Call by reference
참조 : 기본적으로 Call by value인데, 변수 앞에 &를 붙이면 Call by reference가 된다.
//Call by value
$a = 100;
$b = $a;
echo $a."<br>";
echo $b."<br>";
$a = 10;
echo $a."<br>"; // 10
echo $b."<br>"; // 100
echo "-------------------------<br>";
//Call by reference 로 변경하기
$x = 100;
$y = &$x;
echo $x."<br>";
echo $y."<br>";
$x = 10;
echo $x."<br>"; // 10
echo $y."<br>"; // 10
상수 선언 (Define)
$a = 100;
$b = $a;
//$b = &$a; // 이렇게 값을 넣어줘도, 상수이기 때문에 값이 바뀌지 않는다.
define("HELLO", $b);
echo HELLO; // 100
define 된 것이 있는지 확인(defined)
define("HELLO", "world");
if(defined("HELLO")) echo "Exists"; // 출력
else echo "Not exists";
이상한 증감 연산자
PHP에서 증감 연산자는 문자에서도 사용할 수 있다. (신기함)
$a = "Zaz";
echo ++$a; // Zba
변수 지정
$a = "hello";
$$a = "world";
echo $a."<br>"; // hello
echo "$$a"."<br>"; // $hello
echo "{$$a}"."<br>"; // world
// 변수를 { }안에 담음으로써 명확하게 사용할 수 있다.
배열 선언
$name[] = "conative";
$name[] = "kyj";
$name[] = "hello";
// ==
$name = ["conative", "kyj", "hello"];
에러 보기 싫음
에러 메시지를 보이지 않게 하려면 앞에 @를 붙이면 된다. (사용자에게 보여줄 때)
<?php
if(@include 'hello.php'){
echo "있음";
} else {
echo "없음";
}
?>
상수 심화 (constant)
$a = "name";
define("Server_name", "localhost");
echo constant("Server_". $a); // localhost
반복문 / 조건문
foreach 반복문
// $a = array("conative"); //0, conative (지정하지 않았다면 0부터 시작)
$a = array("name"=>"conative");
foreach($a as $b=>$c){
echo $b."<br>"; // name
echo $c."<br>"; // conative
}
특이한 if문
$a = 2;
if($a == 1):
echo "1입니다!";
elseif($a == 2): // else if 로 띄어쓰면 안됨
echo "2입니다!"; // 출력됨
else:
echo "1,2 둘다 아닙니다!";
endif; // if가 끝났다는걸 알려줘야한다.
PHP에서는 break, continue 뒤에 숫자를 지정해 어디서 빠져나갈지를 정할 수 있다.
$i = 0;
while(true){
echo "바깥반복!<br>";
while($i<5){
echo "안쪽반복!<br>";
if($i==3){
echo "끝!";
break 2; //바깥쪽 while을 끝냄.
}
$i++;
}
}
/* 결과
* 바깥반복!
* 안쪽반복!
* 안쪽반복!
* 안쪽반복!
* 안쪽반복!
* 끝!
*/
if처럼 특이한 for문
for($i=0; $i<5; $i++):
echo($i); //01234
endfor; // for이 끝났다는걸 알려줘야한다.
배열 foreach(++)
$name = ["nName"=>"conative", "kyj", "hello"]; //이렇게 실행할 경우 kyj, hello에는 0과 1이 들어간다.
$name = ["nName"=>"conative", "name" => "kyj", "comment"=>"hello"];
foreach($name as $key => $value){
echo $key." : ".$value."<br>";
}
$myArray = array(3=>"hello","world",0=>"it is","php");
foreach($myArray as $key => $value){
echo "$key : $value <br>";
}
/* 결과
* 3 : hello
* 4 : world
* 0 : it is
* 5 : php
*/
//다차원 배열
$hello = array(
"hello" => array(
"h",
"E",
"l",
"L",
"o"
),
"world" => array(
"w",
"O",
"r",
"L",
"d"
)
);
echo $hello["hello"][1]; //E
print_r(array_change_key_case($hello, CASE_UPPER)); //key값이 대문자가됨.
foreach($hello as $key => $value){
echo "$key + $value[1]<br>";
}
/* 결과
* hello + E
* world + O
*/
실행 중인 PHP 중지하기(exit, die, return)
함수 뒤에 or을 작성하면 에러가 발생 시 에러 메시지를 전송한다
$filename = '/path/to/test'; //없는 파일
@$file = fopen($filename, 'r') or exit("파일이 없다!"); //화면에 에러 메시지 출력
// @$file = fopen($filename, 'r') or die("파일이 없다!");
// 이후는 실행되지 않는다.
echo "hello";
return 과 include
include.php
<?php
$a = include ("test.php");
print $a // 8
?>
기타
String이 알파벳, 숫자로만 이루어져있는지 확인하기(ctype_alnum)
// 비밀번호 체크할때 유용할 듯
$a = "1q2w3e4r!"; // 값x
$a = "1q2w3e4r"; // 1
echo ctype_alnum($a);