PHP는 서버측에서 실행되는 스크립트 언어입니다.

PHP는 서버사이트 스크립트 언어입니다. 제이쿼리와 자바스크립트는 웹 브라우저에서 내장된 인터프리터에 의해 해석되는 언어입니다. 즉 웹브라우저에서 이용할 수 있는 프로그램입니다. 반면에 PHP는 서버에 설치된 PHP에 의해 해석됩니다. 이러한 처리를 가능하게 해주는 프로그램 PHP, JSP, ASP 등이 있으며, 워드프레스, 줌라, XE, 카페24, 티스토리 등 플랫폼 역시 PHP를 기반으로 하고 있습니다.

PHP는 서버측에서 실행되는 스크립트 언어입니다.
PHP 시작하기
<?php
    //실행코드
?>
PHP 주석
// 한줄
/* 여러줄 */
echo문View
<!DOCTYPE html>
<?php
	echo "hello PHP";
?>

변수는 여러가지 값으로 변할 수 있는 수를 의미합니다.

$변수명 = 값;
변수선언 방법 View
<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title></title>
	<script>
		var x = "javascript";
		document.write{x};
		document.write{"<br>"};
		document.write{"나는"+ x +"를 배우고 있습니다."};
		document.write{"<br><br>"};
	</script>
</head>
<body>
	<?php
      $javascript = "php";
      echo $javascript;
      echo "<br>";
      echo "나는 ".$javascript."를 배우고 있습니다. ";
      echo "<br>";
      echo "나는 {$javascript}를 배우고 있습니다. ";
      echo "<br>";
      //큰 따옴표는 역슬래시 사용
      echo "나는 \"PHP\"를 배우고 있습니다.";
      echo "<br>";
      echo "나는 \$15를 사용했습니다.";
   	?>
</body>
</html>

배열은 여러개의 값을 변수에 저장할 수 있습니다.

$변수명 = array();
배열선언 방법 View
<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script>
		var earth = new Array();
		earth [0] = "korea";
		earth [1] = "china";
		document.write(earth[0]);
		document.write("<br>");
		document.write(earth[1]);
		document.write("<br><br>");
	</script>
</head>
<body>
	<?php
		//배열 선언
		$earth = array();

		$earth[0] = "korea";
		$earth[1] = "china";

		echo $earth[0];
		echo "<br>";
		echo $earth[1];
		echo "<br><br>";


		//인덱스 숫자뿐만 아니라 문자로도 저장이 가능합니다.
		$earth['city'] = 'seoul';

		echo $earth['city'];
	?>
</body>
</html>
array_push(변수명, 배열에 들어갈 값, 배열에 들어갈 값....)
array_push 선언 방법 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$fruit = array();

		array_push($fruit, 'apple', 'banana', 'grape', 'coconut', 'melon');
		
		echo $fruit[0]."<br>";
		echo $fruit[1]."<br>";
		echo $fruit[2]."<br>";
		echo $fruit[3]."<br>";
		echo $fruit[4]."<br>";
	?>
</body>
</html>
$변수명[인덱스1][인덱스2] = 값;
인덱스 2개 선언 방법 View
<!DOCTYPE html>
<html lang="ko">	
<head>
   <meta charset="UTF-8">
   <title>Document</title>
</head>
<body>
   <?php
      $earth = array();

      $earth['nation'][0] = 'korea';
      $earth['nation'][1] = 'america';
      $earth['nation'][2] = 'canada';
      $earth['nation'][3] = 'japan';
      $earth['nation'][4] = 'china';
      $earth['nation'][5] = 'france';

      //배열의 내용을 보여줍니다.
      var_dump($earth);

      echo "<br><br>";
      echo $earth['nation'][4];
   ?>
</body>
</html>

변수에 사용되는 값이 숫자인지, 문자열인지, 논리값인지를 구분하는 것을 데이터 형이라고 합니다.

데이터형의 종류
데이터형
int or interger 숫자 - 정수
double 숫자 - 소수
string 문자열
boolen 논리값(true,false)
Null 없는 값
array 배열
데이터형 View
<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$num = 12;
		echo "변수 \$num 데이터형(값: {$num})은". gettype($num)."입니다.<br />";

		$greeting = "안녕";
		echo "변수 \$greeting 데이터형(값: {$greeting})은". gettype($greeting)."입니다.<br />";

		$numStr = "121212";
		echo "변수 \$numStr 데이터형(값: {$numStr})은". gettype($numStr)."입니다.<br />";

		$fruit = array();
		echo "변수 \$fruit 데이터형(값: {$fruit})은". gettype($fruit)."입니다.<br />";

		$na = null;
		echo "변수 \$na 데이터형(값: {$na})은". gettype($na)."입니다.<br />";

		$bloolean = true;
		echo "변수 \$bloolean 데이터형(값: {$bloolean})은". gettype($bloolean)."입니다.<br />";
	?>
</body>
</html>

데이터형 변경하기

$date = (데이터형) 값 또는 변수;
데이터 형변환 View
<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$str = "문자열";
		echo "데이터형 변경 php05.php전의 데이터형".gettype($str)."값은 : {$str3} <br>";

		$str = (int) $str;
		echo "데이터형 변경 후의 데이터형".gettype($str)." 값은 : {$str}";
		echo "<br><br>";

		$str2 = "555문자열";
		echo "데이터형 변경 전의 데이터형".gettype($str2)."값은 : {$str3} <br>";

		$str2 = (int) $str2;
		echo "데이터형 변경 후의 데이터형".gettype($str2)." 값은 : {$str2}";
		echo "<br><br>";

		$str3 = "12.45434";
		echo "데이터형 변경 전의 데이터형".gettype($str3)."값은 : {$str3} <br>";

		$str3 = (int) $str3;
		echo "데이터형 변경 후의 데이터형".gettype($str3)." 값은 : {$str3}";
	?>
</body>
</html>

if문 View
<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$music = 'dream lights';

		if($music == 'dream lights'){
			echo "당신이 좋아하는 음악은 dream lights입니다.";
		} else {
			echo "당신이 좋아하는 음악은 dream lights가 아닙니다.";
		}

		$date = "데이터 형";

		if(gettype($date) == 'string'){
			echo "데잍터형은 문자열입니다.";
		} else if(gettype($date) == 'interder'){
			echo "데잍터형은 정수형입니다.";
		} else {
			echo "데이터형은 정수형도 문자열도 아닙니다.";
		}
	?>
</body>
</html>

switch문View
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Document</title>
</head>
<body>
   <?php
      $data = "hello";

      switch ($data) {
         case 'annyung':
            echo "한국어 인사입니다.";
            break;

         case 'konnichiha':
            echo "일본어 인사입니다.";
            break;

         case 'hello':
            echo "영어 인사입니다.";
            break;

         default:
            echo "한국어, 일본어, 영어 인사가 아닙니다.";
            break;
      }
   ?>
</body>
</html>

for문View
<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script>
		//1~10까지 출력해주세요~
		for (var i = 1; i <=12; i++) {
			document.write(i);
		}
	</script>
</head>
<body>
	<select id="birthMonnth" name="birthMonnth">
		<!-- <option value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
		<option value="4">4</option>
		<option value="5">5</option>
		<option value="6">6</option>
		<option value="7">7</option>
		<option value="8">8</option>
		<option value="9">9</option>
		<option value="10">10</option>
		<option value="11">11</option>
		<option value="12">12</option> -->
		<?php
			for($i = 1; $i <=12; $i++){ ?>
			<option value="<?=$i?>"><?=$i?></option>
		<?php } ?>
	</select>
	<label for="birthMonnth">월</label>
</body>
</html>

for문View
<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<select id="birthMonnth" name="birthMonnth">
		<?php
			//8월에 기본 선택되도록 변수 선언
			$selectMonth = 8;

			for($i = 1; $i <=12; $i++){
			
			$selected = '';

			if($i == $selectMonth){
				$selected = "selected";
			}
		?>
			<option value="<?=$i?>" <?=$selected?>><?=$i?></option>
		<?php } ?>
	</select>
	<label for="birthMonnth">월</label>
</body>
</html>

for문3 View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$member = array();

		//member 배열에 0 인덱스를 생성하고 인덱스도 배열로 선언
		$member[0] = array();
		$member[0]['name'] = '김순실';
		$member[0]['userID'] = 'richcl';
		$member[0]['email'] = 'richdle@naver.com';

		$member[1] = array();
		$member[1]['name'] = '장영실';
		$member[1]['userID'] = 'jang';
		$member[1]['email'] = 'jang999@naver.com';

		$member[2] = array();
		$member[2]['name'] = '김경민';
		$member[2]['userID'] = 'kim';
		$member[2]['email'] = 'jkim999@naver.com';

		$member[3] = array();
		$member[3]['name'] = '김민수';
		$member[3]['userID'] = 'sum';
		$member[3]['email'] = 'jkim999@naver.com';

		for($i = 0; $i < count($member); $i++){
			echo $member[$i]['name']."<br>";
		}
	?>
</body>
</html>

foreach문 사용방법

foreach(대상변수 as foreeach문에서 사용할 대상 변수의 대체 이름){
     //실행 코드
}
foreach문 View
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$member = array();

		//member 배열에 0 인덱스를 생성하고 인덱스도 배열로 선언
		$member[0] = array();
		$member[0]['name'] = '김순실';
		$member[0]['userID'] = 'richcl';
		$member[0]['email'] = 'richdle@naver.com';

		$member[1] = array();
		$member[1]['name'] = '장영실';
		$member[1]['userID'] = 'jang';
		$member[1]['email'] = 'jang999@naver.com';

		$member[2] = array();
		$member[2]['name'] = '김경민';
		$member[2]['userID'] = 'kim';
		$member[2]['email'] = 'jkim999@naver.com';

		$member[3] = array();
		$member[3]['name'] = '김민수';
		$member[3]['userID'] = 'sum';
		$member[3]['email'] = 'jkim999@naver.com';

/* 	for($i = 0; $i < count($member); $i++){
			echo $member[$i]['name']."<br>";
		}
*/
 		foreach($member as $data){
			echo $data['name']."<br>";
 		}
	?>
</body>
</html>
trim View

trim()은 문자열의 앞과 뒤에 공백을 삭제하는 기능입니다.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php

		$str = " 안녕하세요. ";

		echo "trim을 사용하지 않은 경우 <br>";
		echo "|".$str."|";

		echo "<br><br>";
		echo "trim을 사용한 경우 <br>";
		echo "|".trim($str)."|";

	?>
</body>
</html>
strtolower() strtoupper() View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$str = "hello World";

		echo $str;
		echo "<br><br>";

		echo "대문자로 출력<br>";
		echo strtoupper($str);
		echo "<br><br>";

		echo "소문자로 출력<br>";
		echo strtolower($str);
	?>
</body>
</html>
strlen() View
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$str = "welcome to my homepage";

		echo $str."의 문자열 길이는 ".strlen($str)."입니다.";
	?>
</body>
</html>
str_replace('치환할 문자', '대체할 문자', '대상 문자열')View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$str = "Hello World";
		$changeWord = str_replace("World", "Sang yung", $str);
		echo $changeWord;
	?>
</body>
</html>
substr()View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		$fileName = "devilcat.jpg";

		$execute = substr($fileName, -4, 4);

		if($execute == '.jpg' || $execute == '.png' || $execute == '.gif'){
			echo "업로드한 파일은 이미지 파일입니다.";
		} else {
			echo "업로드한 파일은 이미지 파일이 아닙니다.";
		}
	?>
</body>
</html>
explode("나눌문자","대상문자열")View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>explode</title>
</head>
<body>
	<?php
		$email = "webstroyboy@naver.com";
		$emailArray = explode("@", $email);

		echo "<pre>";
		var_dump($emailArray);

		echo "<br>";
		echo $emailArray[1];
	?>
</body>
</html>
time()View

time()이라는 함수는 리눅스 시간을 출력해주는 함수입니다. 리눅스 시간이란? 1970년 1월 1일 00시 00분 00초부터 세기 시작하는 시간입니다. 그러므로 time() 함수는 1970년 1월 1일 00시 00분 00초로부터 몇 초가 지났는지를 반환합니다. 이 리눅스 시간을 "타임스탬프"라고 합니다.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		ini_set('date.timezone','Asia/Seoul');
		echo '1970년 1월 1일 00시 00분 00초로부터 '.time().'초가 지났습니다.';
		echo '<br>';
		echo "현재시간은 ".date("Y년 m월 d일 H시 i분 s초", time());
	?>
</body>
</html>
mktime(시, 분, 초, 월, 일, 년)View
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		ini_set('date.timezone','Asia/Seoul');
		
		//echo "2018년 8월 2일 11시 15분 14초의 타임스탬프는? <br>";
		//echo mktime(11, 15, 14, 8, 2, 2018);

		$startTime = mktime(11, 15, 14, 8, 2, 2018);

		$endTime = mktime(11, 20, 14, 8, 2, 2018);

		if($startTime <= time() && $endTime > time()){
			echo "지금은 수업시간입니다.";
		} else {
			echo "지금은 쉬는 시간입니다.";
		}
	?>
</body>
</html>
date 함수에서 사용되는 형식 문자
분류 문자 설명
d 일자를 두 자리로 반환합니다. 01~31
D 요일을 3글자로 반환합니다. Mon~Sun
j 일자를 0이 붙지 않는 형식으로 반환합니다. 1~31
I 요일을 영문 단어로 반환합니다. Sunday~Saturday
S 영문 서수 접미사를 반환합니다. st, nd, rd, th
w 요일을 순자로 반환합니다. 0(일)~6(토)
Z 해당 연도의 몇 번째 날인지 반환합니다. 0~364
W 해당 연도의 몇 번째 주인지 반환합니다. 12(연도의 12번째 주)
F 월을 영문 단어로 반환합니다. January~December
m 월을 두자리 숫자로 반환합니다. 01~12
M 월을 영문 3글자로 반환합니다. Jan~Dec
n 월을 0이 붙지 않는 숫자로 반환합니다. 1~12
t 해당 월의 날짜 수를 반환합니다. 28~31
년도 L 윤년인지 여부를 반환합니다. 윤년이면1, 아니면0
Y 연도를 4자리 수로 반환합니다. 2018
y 연도를 2자리 수로 반환합니다. 18
년도 a 오전과 오후를 영문 소문자로 반환합니다. am, pm
A 오전과 오후를 영문 대문자로 반환합니다. AM, PM
g 시간을 12시간 형식으로 반환하며, 0이 붙지 않습니다. 1~12
G 시간을 24시간 형식으로 반환하며, 0이 붙지 않습니다. 0~24
h 시간을 12시간 두 자리 형식으로 반환합니다. 01~12
H 시간을 24시간 두 자리 형식으로 반환합니다. 00~23
i 분을 두자리 형식으로 반환합니다. 00~59
s 초를 두자리 형식으로 반환합니다. 00~59
날짜/시간 c ISO 8601 형식의 날짜로 반환합니다. 2017-01-01T12:00:00+09:00
r RFC 2822 형식의 날짜로 반환합니다. Sun, 09, Jan 2019 12:00:00+09:00
U 유닉스 형식 시간을 반환합니다. 1136041200

GET은 데이터를 불러올 때 사용하는 방식이고 POST는 데이터를 입력할 때 사용하는 방식입니다.

GET 변수View
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		//http://leehun8.dothome.co.kr/PHP/php22.php?type=first&mobile=ok

		echo "GET['type']는 ".$_GET['type']."<br>";
		echo "GET['mobile']는 ".$_GET['mobile']."<br>";
	?>
</body>
</html> 
POST 변수View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
		echo "이메일 주소 입력값 " .$_POST['email']."<br>";
		echo "패스워드 입력값 " .$_POST['password']."<br>";
	?>
</body>
</html>
class 클래스명{
     //기능 구현
}
//클래스를 실행
new 클래스명

인스턴스 생성
클래스를 변수에 대입하여 이것을 인스턴스 생성이라고 부릅니다.
변수 = new 클래스명;

클래스의 메소드 호출
인스터스 생성한 변수 -> 메소드명(파라미터);
생성자View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php

		class people{

			//생성자
			function __construct(){
				echo "사람들은 돈을 좋아합니다. <br>";
			}

			//말하기
			function speak($word){
				echo $word."라고 말했다. <br>";
			}

			//달리기
			function run($km){
				echo $km."를 달리다. <br>";
			}

			//걷기
			function walk($km){
				echo $km."를 걷다. <br>";
			}

			//소멸자
			function __destruct(){
				echo "힘들다 <br>";
			}

		}

		//인스턴스 생성
		$people = new people;

		//메소드 사용
		$people -> speak('나는 인간이다');

	?>
</body>
</html>
데이터베이스 접속View
<!DOCTYPE html>
<?php

$host = "localhost";
$user = "leehun8";
$pw = "forever0";
$dbName = "leehun8";
$dbConnect = new mysqli($host, $user, $pw, $dbName);
$dbConnect->set_charset("utf8");

if(mysqli_connect_errno()){
	echo "데이터베이스 접속 실패";
	echo mysqli_connect_errno();
} else {
	echo "데이터베이스 접속 성공";
}

?>
레코드 입력View
<?php
//mysql 접속 소스를 include
include_once "../connectDB.php";

//데이터 입력
$userID = "webstroyboy";
$name = "leehun";
$userPW = "1234";
$email = "leehun@naver.com";
$birth = "1999-04-05";
$gender = "m";

//쿼리문 작성
$sql = "INSERT INTO myMember(useID, uname, upassword, email, birthDay, gender, regTime) VALUES";
$sql .= "('{$userID}','{$name}','{$userPW}','{$email}','{$birth}','{$gender}',NOW())";

//쿼리문 전송 및 전송값을 result 변수에 대입
$result = $dbConnect->query($sql);

if($result){
echo "yes";
}else {
echo "no";
}


//INSERT INTO myMember(useID, uname, upassword, email, birthDay, gender, regTime) VALUES('webs', '김장거', 'sdfsd', 'riluy@naver.com', '1936-04-05', 'm', now());

?>
form 태그에 입력된 데이터를 테이블에 입력하기View

<!DOCTYPE html>
<html lang="ko">
<head>
   <meta charset="UTF-8">
   <title>Document</title>
</head>
<body>
         <h1>회원가입</h1>
         <form action="php25-insert.php">
            <label for="userName">이름</label>
            <input type="input" id="userName" name="userName" placeholder="이름입력"><br>

            <label for="userID">ID</label>
            <input type="input" id="userID" name="userID" placeholder="ID입력"><br>

            <label for="userPW">PW</label>
            <input type="input" id="userPW" name="userPW" placeholder="비밀번호 입력"><br>

            <label for="userGender">성별</label>
            <select name="userGender" id="userGender">
               <option value="m">남성</option>
               <option value="w">여성</option>
            </select>

            <label for="userEmail">이메일</label>
            <input type="Email" id="userEmail" name="userEmail" placeholder="이메일 입력"><br>

            <input type="submit" value="가입하기"/>
         </form>
</body>
</html>

<?php
	
	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	//post 방식으로 전달 받은 값 확인
	echo "<pre>";
	var_dump($_POST);

	//이름 검증
	if($_POST['userName'] == '' || $_POST['userName'] == null){
		echo "해당 값을 사용할 수 없습니다. 1.name";
		exit;
	}
	$userName = $_POST['userName'];
	//앞 뒤 공백제거
	$userName = trim($userName);
	//쿼리문의 따옴표 처리를 위해 real_escape_string 메소드 사용
	$userName = $dbConnect->real_escape_string($userName);



	//아이디 검증
	if($_POST['userID'] == '' || $_POST['userID'] == null){
		echo "해당 값을 사용할 수 없습니다. 2.id";
		exit;
	}
	$userID = $_POST['userID'];
	$userID = trim($userID);
	$userID = $dbConnect->real_escape_string($userID);


	//비빌번호 검증
	if($_POST['userPW'] == '' || $_POST['userPW'] == null){
		echo "해당 값을 사용할 수 없습니다. 3.pw";
		exit;
	}

	$userPW = sha1("web".$_POST['userPW']);

	//
	if($_POST['userGender'] == 'm' || $_POST['userGender'] == 'w'){
		$userGender = $_POST['userGender'];
	} else {
		echo "해당 값을 사용할 수 없습니다. 4.userGender";
		exit;
	}

	//이메일 유효성 검사
	$emailCheck = filter_var($_POST['userEmail'], FILTER_VALIDATE_EMAIL);
	if($emailCheck == false){
		echo "해당 값을 사용할 수 없습니다. 5";
		exit;
	}
	
	$userEmail = $_POST['userEmail'];


	//쿼리문 작성
	$sql = "INSERT INTO myMember(useID, name, password, email, gender) VALUES";
	$sql .= "('{$userID}', '{$userName}', '{$userPW}', '{$userEmail}', '{$userGender}')";

	//쿼리문 전송 및 전송값을 result 변수에 대입
	$result = $dbConnect->query($sql);

	if($result){
		echo "회원 가입 정보 입력 완료 (OK)";
	} else {
		echo "회원 가입 정보 입력 실패 (No)";
	}
?>

테이블 데이터 불러오기

데이터 불러오기View

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	
	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	$myMemberID = 1;

	$sql = "SELECT * FROM myMember WHERE myMemberID = {$myMemberID}";
	$result = $dbConnect->query($sql);

	$memberInfo = $result->fetch_array(MYSQLI_ASSOC);

	echo "<pre>";
	var_dump($memberInfo);

	echo "회원번호가 {$myMemberID}번인 회원의 이름은 ".$memberInfo['name'];

	//SELECT * FROM mymember WHERE myMemberID = 1
?>
</body>
</html>

전체 데이터 불러오기

전체 데이터 불러오기View

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	$sql = "SELECT name, useID FROM myMember";
	$result = $dbConnect->query($sql);

	$numResult = $result->num_rows; 		//레코드 수를 가져오는 명령어

	if($numResult != 0){
		for($i = 0; $i < $numResult; $i++){
			$memberInfo = $result->fetch_array(MYSQLI_ASSOC);
			echo "회원이름:".$memberInfo['name'].", 회원 ID ".$memberInfo['useID']." <br>";
		}
	} else {
		echo "데이터가 없습니다.";
	}
?>
</body>
</html>
데이터 순서대로 불러오기View

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	$sql = "SELECT name, useID FROM myMember ORDER BY name DESC";
	$result = $dbConnect->query($sql);

	$numResult = $result->num_rows; 				//레코드 수를 가져오는 명령어

	if($numResult != 0){
		for($i = 0; $i < $numResult; $i++){
			$memberInfo = $result->fetch_array(MYSQLI_ASSOC);
			echo "회원이름:".$memberInfo['name'].", 회원 ID ".$memberInfo['useID']." <br>";
		}
	} else {
		echo "데이터가 없습니다.";
	}
?>
</body>
</html>
500개 회원가입View

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<?php
	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	//성 배열 선언
	$familyName = array();

	//성 데이터 입력
	$familyName = ['김', '이', '박', '전', '황', '목', '송', '정', '노', '최', '조', '백', '윤', '양'];

	//이름 배열 선언
	$lastName = array();

	//이름 데이터 입력
	$lastName = ['유리', '경민', '민수', '하루', '기욱', '태진', '미우', '창석', '상연', '해윤', '가연', '오리'];

	//성별 배열 선언
	$gender = ['m','w'];

	//테이블에 회원 정보 입력 성공 카운드
	$successCount = 0;
	//테이블에 회원정보 입력 실패 카운드
	$failCount = 0;

	//insert문을 500회 작동시키기위한 for문
	for($i = 1; $i <= 500; $i++){
		//랜덤으로 성을 받음
		$numRandomFN = rand(0,count($familyName) - 1);
		//랜덤으로 이름을 받음
		$numRandomLN = rand(0,count($lastName) - 1);
		//랜덤으로 성별을 받음
		$userGender = $gender [rand(0,1)] ;
		//랜덤으로 비밀번호를 받음
		$userPw = sha1("kim".rand(1,1000));

		//랜덤으로 부여 받은 이름을 하나의 데이터로 합침
		$userName = $familyName[numRandomFN].$lastName[$numRandomLN];

		//랜덤으로 아이디를 부여
		$userId = "kim".rand(1,999999);

		//랜덤으로 이메일을 부여
		$email = "web".rand(1,9999999)."@naver.com";

		//데이터 입력
		$sql = "INSERT INTO myMember(useID, name, password, email, gender, regTime) VALUES";
		$sql .= "('{$userId}', '{$userName}','{$userPw}','{$userGender}','{$email}', now())";
		$result = $dbConnect->query($sql);

		if($result){
			$successCount++;
		} else {
			$failCount++;
		}
	}

	//반복문이 끝난 후 실행 결과
   echo "입력 성공 수 {$successCount}";
   echo "<br>";
   echo "입력 실패 수 {$failCount}";

?>
</body>
</html>
데이터 50개씩 불러오기View

<?php

	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	//현재 페이지 값을 변수에 저장
	// $page = 1;

	//첫번째 뷰를 구하는 공식
	// $sql = "SELECT * FROM myMember LIMIT 0, 50";

	// 1. 페이지 = SELECT * FROM myMember LIMIT 0, 50
	// 2. 페이지 = SELECT * FROM myMember LIMIT 50, 50
	// 3. 페이지 = SELECT * FROM myMember LIMIT 100, 50
	// 4. 페이지 = SELECT * FROM myMember LIMIT 150, 50

	// $firstLimitValue = ($numView * 1) - 50;
	// $firstLimitValue = ($numView * 2) - 50;
	// $firstLimitValue = ($numView * 3) - 50;
	// $firstLimitValue = ($numView * 4) - 50;

	if (isset($_GET['page'])) {
		$page = (int) $_GET['page'];
	} else {
		//페이지 값을 1로 초기화
		$page = 1;
	}

	//화면에 출력할 레코드 수
	$numView = 50;

	//변수 page값에 따른 LIMIT의 첫번째 값을 계산 
	$firstLimitValue = ($numView * $page) - $numView;

	$sql = "SELECT * FROM myMember LIMIT {$firstLimitValue}, {$numView}";
	$result = $dbConnect->query($sql);
?>
<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>고객리스트</title>
	<style>
		table {width: 100%;}
		table td {border: 1px solid #ccc;}
	</style>
</head>
<body>
	<h1>고객 리스트</h1>
	<table>
		<tr>
			<td>번호</td>
			<td>ID</td>
			<td>이름</td>
			<td>이메일</td>
			<td>성별</td>
			<td>가입일</td>
		</tr>
		<?php
			for ($i=0; $i < $result->num_rows; $i++) { 
				$memberInfo = $result->fetch_array(MYSQLI_ASSOC);
		?>
			<tr>
				<td><?=$memberInfo['myMemberID']?></td>
				<td><?=$memberInfo['useID']?></td>
				<td><?=$memberInfo['name']?></td>
				<td><?=$memberInfo['email']?></td>
				<td><?=$memberInfo['gender']?></td>
				<td><?=$memberInfo['regTime']?></td>
			</tr>
		<?php } ?>
	</table>
</body>
</html>
이름 변경 폼 만들기 View

<?php
	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	//이름 정보를 int로 형 변환
	$myMemberID = (int) $_POST['memberID'];

	if($myMemberID == 0){
		echo "값이 유효하지 않습니다.";
		exit;
	} 

	if($_POST['cn'] == '' || $_POST['cn'] == null){
		echo "값이 유효하지 않습니다.";
		exit;
	} else {
		$cn = $dbConnect->real_escape_string($_POST['cn']);
	}

	$sql = "UPDATE myMember SET name = '{$cn}' WHERE myMemberID = {$myMemberID}";
	$result = $dbConnect->query($sql);

	if ($result) {
		echo "회원번호 {$myMemberID}의 이름이 {$cn}으로 변경되었습니다.";
	} else {
		echo "이름 변경 실패";
	}
?>
데이터 삭제하기 View

<?php
	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	$sql = "DELETE FROM myMember WHERE myMemberID =14"; 
	$res = $dbConnect->query($sql);

	if($res){
		echo "14번 회원의 정보가 삭제되었습니다(Y).";
	} else {
		echo "삭제 실패(N)";
	}
?>

PHP와 MySQL의 연동에서는 테이블에 이름을 저장할 때 그 값이 빈값인지 확인하고 real_escape_string 처리하여 데이터베이스에 입력했습니다. 이 값이 한글로만 구성되어 있는지 영어로만 구성되어 있는지 또는 어떤 특별한 패턴을 지키고 있는지에 대해 체크하려면 정규 표현식을 사용합니다.

preg_match()
preg_match(패턴, 검사할 텍스트, 반환할 패턴 일치 결과를 받을 변수)
$pattern = '/패턴 입력할 곳/'
패턴 작성 방법
  • 시작이 어떠한 문자로 시작해야 한다는 것을 나타낼 때는 '^'
  • 어떠한 문자로 끝나야 한다는 것을 나타낼 때는 '$'
  • 문자의 간격을 지정하고자 할 때는 '[]'
  • 시작할 문자와 끝날 문자의 간격의 사이에는 '-'을 사용합니다.
  • '[]' 사이에 들어갈 값으로는 한글, 영어소문자, 영어대문자를 넣어 확인할 수 있습니다.
  • OR 조건을 의미하는 기호는 '|'입니다.
한글의 간격
가-힣 정규 표현식 [가~힣]
영어 소문자
a-z 정규 표현식 [a-z]
영어 대문자
A~Z 정규 표현식 [A-Z]
한글, 영어소문자, 영어 대문자 모두를 간격으로 지정하려면
가-힣a-zA-Z 정규 표현식 [가-힣a-zA-Z]
처음부터 끝까지 한글로만 이루어지 값을 찾는다고 가정하면
^[가-힣]$
1회만 검사할 경우
^[가-힣]$ 또는 ^[가-힣]{1}$
1회 이상 검사할 경우
^[가-힣]+$ 또는 ^[가-힣]{1,}$
3회에서 5회까지 검사할 경우
^[가-힣]{3,5}+$
정규식View
<?php

	$pattern = '/^[가-힣]+$/';

	$myName = '드루킹';

	if(preg_match($pattern, $myName, $matches)){
		echo "값 {$myName}은 정규식 표현에 적합합니다.";
		echo "<pre>";
		var_dump($matches);
	} else {
		echo "이름에 특수문자, 영문, 숫자를 사용할 수 없습니다.";
	}
	
?>
휴대폰 번호가 010-으로 시작하는 규칙을 체크하는 패턴
$pattern = '/^(010|011|016|017|018|019)-/';
  • ^는 처음 오는 패턴을 의미합니다.
  • (010|011|016|017|018|019)는 010 ~ 019인 패턴을 의미합니다.
  • -는 휴대전화 번호 010-에서 -를 의미합니다.
휴대전화 번호의 가운데에 위치하는 숫자 3자리나 4자리인 숫자를 체크하는 방법
$pattern = '/^(010|011|016|017|018|019)-[0-9]{3,4}-/';
  • 패턴식 [0-9]{3,4}-는 0에서 9까지의 숫자를 3회에서 4회 검사한다는 의미입니다.
마지막 패턴
$pattern = '/^(010|011|016|017|018|019)-[0-9]{3,4}-[0-9]{4}$/';
  • 패턴식 [0-9]{4}$는 0에서부터 9까지의 숫자가 있는지 4회 체크합니다.

정규식View
<?php

	$pattern = '/^(010|011|016|017|018|019)-[0-9]{3,4}-[0-9]{4}$/';

	$myPhone = '012-3939-3030';

	if(preg_match($pattern, $myPhone, $matches)){
		echo "휴대폰 번호로 입력된 값 {$myPhone}는 유효성에 일치합니다.";
		echo "<pre>";
		var_dump($matches);
	} else {
		echo "사용불가한 번호입니다.";
	}
?>

이메일 주소의 유효성을 검사하는 패턴
$pattern = '/^[a-zA-Z0-9_\-\]+/';

\-처럼 앞에 역슬래시를 사용하는 이유는 -가 정규 표현식에서 간격을 조정하는 기능을 담고 있기 때문입니다. 이것을 기능으로 사용하는 것이 아니라 문자로 사용하기 위해\를 앞에 붙입니다. \를 앞에 붙이면 문자로 사용하겠다는 것을 의미합니다.

$pattern = '/^[a-zA-Z0-9_\-\]+@/';

@를 기준으로 뒤에는 호스트가 붙으면 끝에는 .com이나 .co.kr가 붙을 수 있습니다.

$pattern = '/^[a-zA-z0-9_\-\.]+@[a-zA-z\-]+\.[\.a-zA-Z]+$/';
정규식View
<?php

	$pattern = '/^[a-zA-z0-9_\-\.]+@[a-zA-z\-]+\.[\.a-zA-Z]+$/';

	$myEmail = 'leehun@naver.com';

	if(preg_match($pattern, $myPhone, $matches)){
		echo "입력한 이메일 주소 {$myEmail}는 사용가능한 이메일 주소입니다.";
		echo "<pre>";
		var_dump($matches);
	} else {
		echo "사용불가한 이메일입니다.";
	}
>>
파일 업로드
정규식View

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>파일 업로드</h1>

	<form name="fileUpload" method="post" action="php36_file.php" 
	enctype="multipart/form-data">

	<input type="file" name="myImage" />
	<input type="submit" value="파일 등록">
		
	</form>
</body>
</html>
move_uploded_file()
$_FILES['myImage']['name'];
$_FILES['myImage']['type'];
$_FILES['myImage']['tmp_name'];
move_uploaded_file($FILES['myImage'] ['tmp_name'],'./image/box.png');

디렉터리 함수에는 is_dir(), opendir(), closedir(), readdir()

$dirCheck = is_dir("./images/");
해당 위치에 images 폴더가 있다면 true를 반환
해당 위치에 images 폴더가 없다면 false를 반환
$opendir = opendir("./images/");
해당 위치에서 images 폴더를 여는데 성공 했다면 true를 반환
해당 위치에서 images 폴더를 여는데 실패 했다면 false를 반환
//폴더 안에 파일을 읽을 때 사용합니다.
$readFile = readdir($opendir) 또는 readdir(opendir("./images/"));
//열었던 디렉터리를 닫을 때 사용합니다.
close($opendir);
정규식View
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>

	<?php

	//체크할 디렉터리를 대입
	$dir = "./images/";

	//폴더가 있는지 확인 
	if(is_dir($dir)){				//디렉터리 존재 유무를 확인 
		$opendir = opendir($dir);	//디렉터리를 사용하기 위해서 opne;

		if($opendir == true){
			while(($file = readdir($opendir)) != false){
				echo $file."<br />";
			}
		}

		//폴더를 열지 못했을 때
		else {
			echo "해당 폴더를 열지 못했습니다.";
			exit;
		}

	}
	//폴더가 없는 경우
	else {
		echo "해다 폴더가 없습니다.";
		exit;
	}

?>



</body>
</html>

파일 함수를 사용하면 파일을 생성한 후 텍스트 파일에 내용을 입력할 수 있으며 파일 내용을 읽어들일 수도 있습니다.

foen()
fopen("파일 경로 및 파일 몇", 파일을 여는 옵션)
foen() 함수의 파일 열기 옵션
r 파일을 읽기 전용으로 열기(이 옵션으로 파일을 열면 쓰기 불가
w 파일을 쓰기 전용으로 열기(기존 파일이 있을 경우, 내용이 삭제되고 처음부터 다시 씀)
a 파일을 쓰기 전용으로 열기(기존파일이 있을 경우, 내용 뒤에 덧붙임)
r+ 파일을 읽고 쓸 수 있게 열기(기존에 파일이 있을 경우, 내용은 삭제되고 처음부터 다시 씀
a+ 파일을 읽고 쓸 수 있게 열기(기존에 파일이 있을 경우, 내용 뒤에 덧붙임

파일 쓰기

fwrite() 함수
$fp = fopen('./myFiles/mydiary.txt','r+'); $fw = fwrite($fp, '파일에 쓸 내용');
View
<!DOCTYPE html>
<html lang="ko">
<head>
   <meta charset="UTF-8">
   <title>Document</title>
</head>
<body>
	<?php
		//파일에 쓸 내용
		$content = "HELLO HH";

		//내용을 저장할 파일명
		$fileName = "helloWorld.txt";

		//파일 열기
		$fp = fopen('./myFiles/'.$fileName, 'w');

		//파일 쓰기
		$fw = fwrite($fp, $content);

		//파일 쓰기 성공여부
		if($fw == false){
			echo "파일 쓰기에 실패했습니다.";
		} else {
			echo "파일 쓰기 완료";
		}

		//파일 닫기
		fclose($fp);
	?>
</body>
</html>

파일 읽기

fread() 함수
$fp = fopen('파일경로', 'r+');
$fr = fread($fp, '불러올 용량');
filesize() 함수
filesize('파일경로 및 파일명');
file_exists() 함수
file_exists('파일경로 및 파일명');
freadView

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	$filePathName = "./myFiles/helloWorld.txt";

	//파일 존재 여부 확인
	if(file_exists($filePathName)){
		//파일 열기
		$fp = fopen($filePathName, 'r');

		if ($fp) {
			//파일 읽기
			$fr = fread($fp, filesize($filePathName));
			if ($fr) {
				echo $fr; //내용출력
				fclose($fp); //파일닫기
			} else {
				echo "파일 읽기에 실패했습니다.";
			}
		} else {
			echo "파일 열기에 실패했습니다.";
		}
	} else {
		echo "파일이 존재하지 않습니다.";
	}
?>
</body>
</html>
fgets() 함수
$fp = fopen("파일경로 및 파일명", "r+"); $fr = fgets($fp, "불러올 용량")
fgetsView

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	$filePathName = "./myFiles/largeRow.php";

	if (file_exists($filePathName)){
		$fp = fopen($filePathName, 'r');
		//읽어올 용량 설정
		$readByte = 512;
		if ($fp) {
			while (($fr = fgets($fp, $readByte)) != false){
				echo $fr."<br>";
			}
		}
	}
?>
</body>
</html>
<a href="링크주소" ping="통계 자료를 수집 할 주소">링크
pingView

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<a href="http://leehun.dothome.co.kr" ping="php44_ping.php?linkNum=1">LEEHUN</a>
</body>
</html>
pingView

<?php
	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	$linkNum = (int) $_GET['linkNum'];

	if ($linkNum == 0) {
		exit;
	}

	$sql = "INSERT INTO linkClickCount(linkNum, regTime)";
	$sql = "VALUES({$linkNum}, NOW())";
	$dbConnect->query($sql);

?>
ping-tableView

<?php
	//mysql 접속 소스를 include
	include_once "../connectDB.php";

	//테이블 생성을 위한 쿼리문
	$sql = "CREATE TABLE linkClinkCount(";
	$sql .= "linkClinkCountID INT UNSIGNED NOT NULL AUTO_INCREMENT,";
	$sql .= "linkNUM INT UNSIGNED NOT NULL COMMENT '링크 고유번호',";
	$sql .= "regTime DATETIME NOT NULL COMMENT '클릭한 시간',";
	$sql .= "PRIMARY KEY(linkClinkCountID))";
	$sql .= "CHARSET=utf8 comment='링크 클릭 수 집계'";

	$res = $dbConnect->query($sql);
	if ($res) {
		echo "yes";
	} else {
		echo "no";
	}

?>

쿠키와 세션은 어떠한 상태를 유지하는 기술입니다. 쿠키는 사용자의 컴퓨터에 상태를 저장하며 세션은 서버에 상태를 저장합니다.

쿠키 생성 방법

setcookie('쿠키 이름', '쿠키 값', 유지시간, '쿠키 적용 경로');
setcookieView

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	setcookie('myCookie','itIsMyCookie',time()+10000,'/');

	if(isset($_COOKIE['myCookie'])){
		echo "쿠키 생성 완료 쿠키 값은 {$_COOKIE['myCookie']}";
	} else {
		echo "쿠키 생성 실패";
	}
?>
</body>
</html>
쿠키를 하루동안 유지하기
1분은 1초가 60개 있기 때문에 time()+60을 설정 하면 1분 동안 유지 1시간은 1분이 60개 있기 때문에 time()+(60*60)을 설정하면 1시간 동안 유지 하루는 1시간이 24개 있기 때문에 time()+(60*60*24)를 설정하면 하루동안 유지
쿠키 삭제View

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php

	setcookie('myCookie',null, time()-3600,"/");
	if(isset($_COOKIE['myCookie'])){
		echo "쿠키가 존재합니다. ";
	} else {
		echo "쿠키가 삭제되었습니다.";
	}
	
?>
</body>
</html>
세션 생성 방법
$_SESSION['세션 이름'] = 세션값;
세션View

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	session_start();

	//세션 생성
	$_SESSION['userId'] = 'leehun';

	if (isset($_SESSION['userId'])){
		echo "세션 생성 완료 아이디 값: {$_SESSION['userId']}";
	} else {
		echo "세션 생성 실패";
	}

?>
</body>
</html>
세션 유지 시간 변경
ini_get('값을 확인할 php 설정항목');
ini_set('값을 변경할 php 설정항목', 변경할 값);
세션 시간설정View

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	//페이지의 모든 코드를 처리한 후 출력문을 처리하는 기능
	ob_start();
	session_start();

	//php 설정 항목 중 session.cookie_lifetime의 값을 가져와서 0이면 변경
	if (ini_get('session.cookie_lifetime') == 0){
		ini_set('session.cookie_lifetime', 10);
	}
	session_start();

	//세션 생성
	$_SESSION['mySession'] = 'lee';

	if(isset($_SESSION['mySession'])){
		echo "세션 생성 완료 : {$_SESSION['mySession']}";
	} else {
		echo "세션 생성 실패";
	}

?>
</body>
</html>
세션 시간설정View

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	
	session_start();

	//세션 생성
	$_SESSION['mySession5'] = 'hun';

	echo "세션 생성 후 존재 여부 확인 <br>";
	if(isset($_SESSION['mySession5'])){
		echo "mySession5 세션이 존재합니다. <br>";
	} else {
		echo "mySession5 세션이 존재하지 않습니다. <br><br>";
	}

	//세션 삭제
	unset($_SESSION['mySession5']);

	echo "세션 삭제 후 존재 여부 확인 <br>";
	if(isset($_SESSION['mySession5'])){
		echo "mySession5 세션이 존재합니다. <br>";
	} else {
		echo "mySession5 세션이 존재하지 않습니다. <br>";
	}


?>
</body>
</html>
extends 사용방법
class 클래스명 extends 상속 받을 클래스명
클래스 상속View

<?php

	class operation{
		function plus($num1, $num2){
			$result = $num1 + $num2;
			return "{$num1}+{$num2} = ".$result;
		}	
	}

	class load extends operation{}

	//인스턴스 생성
	$load = new load;

	echo $load->plus(1,2);

?>

접근 제한자

접근 제한자의 종류에는 public, private, protected가 있으며, 접근 제한자를 지정하지 않았을 경우 public이 기본값으로 사용됩니다.

public 클래스 안에서든 밖에서든 접근 가능, 상속 가능
protected 클래스 내부에서 접근 가능, 상속 가능
private 클래스 내부에서만 접근 가능, 상속 가능
메소드 접근 제한자 설정View

<?php
	
	class hello {
		protected function say($word){
			echo "$word";
		}
	}

	//인스턴스 생성
	$hello = new hello;
	$hello->say("Hello World");
?>
메소드 접근 제한자 설정View

접근 제한자 protected로 생성된 메소드를 접근 제한자 public이 선언된 메소드로 호출하여 사용할 수 있습니다.


<?php
   class hello{
      protected function say($word){
         echo "$word";
      }
      public function say2($word){
         $this->say($word);
      }
   }

   $hello = new hello;
   $hello->say2("hello world");
?>
메소드 접근 제한자 설정View

protected로 선언된 메소드는 하위클래스에서도 호출 할 수 있습니다.


<?php

	class hello {
		protected function say($word){
			echo "$word";
		}
	}

	//클래스 hello를 상속 받음
	class hello2 extends hello{
		public function say2($word){
			//클래스 hello를 상속받았으므로 say메소드에 접근 가능
			$this->say($word);
		}
	}

	$hello2 = new hello2;
	$hello2->say2("hello world");

?>
static

클래스를 사용하기 위해서는 클래스의 인스턴스 생성하고 메소드를 호출해야 합니다. 인스턴스를 생성하지 않고 클래스 외부에서 메소드를 호출하는 방법을 사용합니다.

static function 메소드명(){}
접근제한자 static function 메소드명(){}
//인스턴스를 생성하지 않고 메소드를 호출하는 경우 클래스명::메소드명();
staticView

<?php

	class hello{
		//static를 사용해서 메소드를 생성
		static function output($word){
			echo "메세지를 출력하는 메소드<br>";
			echo $word;
		}
	}

	//인스턴스 생성하지 않고 클래스 hello의 메소드 output호출
	hello::output("hello world");
?>