이번에는 PHP에 대한 기초 내용을 소개합니다. 저도 PHP린이이기 때문에 잘못된 내용이 있다면 덧글로 지적 바랍니다.
환경
PHP v5.5에서하고 있습니다. php를 설치하여 Web 서버 (Apache 등)에 올리면 움직입니다..php
<?php
//insert code...
?>
변수
PHP는 형태의 선언이없고 JavaScript와 같은 var도 없습니다.$
$msg = "Hello World";
echo $msg;
$msg
"Hello World"
echo
$msg
String 형입니다.
PHP가 취급하는 형태에는 다음과 같은 것들이 있습니다
- 문자열 처리
- string
- 숫자를 처리
- int
- float
- 부울 (true / false)
- boolean
- 배열
- 객체
- null
var_dump
$msg = "Hello World";
var_dump($msg);
상수
방금 변수는 나중에 변경할 수있는 상자였습니다. 상수는 한번 정의하면 나중에 바꿀 수없는 것이되어 있습니다. 상수를 정의 할 때define
define("PI",3.141592);
echo PI;
$
필요 없다 라는 것과 상수를 정의 할 때
모두 대문자 로하는 것이 사실상의 표준이라는 것입니다. 이
PI
PI = 3;
var_dump(__LINE__); //행의 수
var_dump(__FILE__); //파일 패스
var_dump(__DIR__); //드렉토리 패스
문자열
문자열은" "
' '
$name = "honggildong";
echo "My name is $name";
$name = "honggildong";
echo "My name is $name";
echo "My name is ${name}";
echo "My name is {$name}";
문자열 연결
변수를 확장 한 것과 문자열을 연결 시키면 동일한 수 있습니다.$name = "honggildong";
echo 'My name is '.$name;
.
배열
비슷한 데이터를 하나의 이름으로 관리하고 싶을 때 사용할 수있는 것이 배열입니다.$colors = array("red","blue","yellow");
[]
$colors = ["red","blue","yellow"];
echo $colors[0];
연관 배열
쓰는 법을 살펴 보자$members = [
"hong" => "honggildong",
"hoge" => "hogehogeo"
];
echo $members["hong"]; //honggildong
루프 및 조건 분기
루프 (for, while)와 조건 분기 (if, switch)는 다른 언어와 다르지 않기 때문에 생략합니다. PHP는 HTML에 삽입 할 경우가 종종있다고 생각하는데요.?><ul>
<?php for($i=0;$i<10;$i++){ ?>
<li><?php echo $i ?></li>
<?php } ?>
</ul>
콜론 구문
이라는 것을 사용 작성할 수 있습니다.?><ul>
<?php for($i=0;$i<10;$i++): ?>
<li><?php echo $i ?></li>
<?php endfor; ?>
</ul>
:
end〇〇
함수
함수는 여러 프로세스를 하나로 묶어주는 것입니다. 함수는인수
와반환 값
이 존재합니다. 우선 단순히Hello World
echo
function hello(){
echo "Hello World";
}
hello(); //Hello World
function
function hello($name){
echo "Hello ${name}";
}
hello("gildong"); // Hello gildong
gildong
$name
$name
로컬 변수
입니다. 이 함수 외부에서$name
function hello($name){
return "Hello ${name}";
}
echo hello("gildong"); // Hello gildong
return
클래스
클래스라는 것은 설계도 잘 알려져 있습니다. 여러 번 같은 것이 등장하는 경우는이 클래스를 사용하는 것이 좋다고 알려져 있습니다. 쓰는 법을 살펴 보자. 에서 사용자를 관리하는User
class User{
//property
public $name;
//constructor
public function __construct($name){
$this->name = $name;
}
//method
public function sayName(){
echo "Hello $this->name !";
}
}
첫 글자가 대문자
라는 약속이 있으므로 주의합니다.property
constructor
method
property
constructor
method
$name
new
$gildong = new User("gildong");
$gildong
echo $gildong->name;
$gildong->sayName();
클래스의 상속
클래스를 만들 때, 아까의 클래스에 닮아 있지만 여기에 차별화하고 있고 ,, 조금 다른 움직임을 시키고 싶다. . 같은 것이 있었던 것처럼 그 클래스를 또한 1에서 쓰는 것은별로, 잘되지 않습니다. 그럴 때 이전 만든 클래스를 계승하고 새로운 것을 만드는클래스의 상속
이 편리 하겠지요. 아까 만든 User 클래스를 상속시켜 SpecialUser라는 클래스를 만듭니다.class User {
public $name;
public function __construct($name){
$this->name = $name;
}
public function sayHi(){
echo "Hello $this->name !";
}
}
class SpecialUser extends User {
public function saySpecialHi(){
echo "I am Special $this->name";
}
}
extends
$gildong = new SpecialUser("gildong");
over ride
여기에서 User 클래스의sayHi
class User {
public $name;
public function __construct($name){
$this->name = $name;
}
public function sayHi(){
echo "Hello $this->name !";
}
}
class SpecialUser extends User {
public function sayHi(){
echo "I am Special $this->name";
}
}
$gildong = User("gildong"); //User클래스
$hong = SpecialUser("hong"); //SPUser클래스
$gildong->sayHi(); // Hello gildong
$hong->sayHi(); // I am Special hong
over ride
말합니다. 단순히 "덮어 쓰기"입니다. 이 over ride 유용하지만, 바라지 않는 경우도 있다고 생각합니다. 이 때 사용할 수있는 것이final
class User {
public $name;
public function __construct($name){
$this->name = $name;
}
final public function sayHi(){
echo "Hello $this->name !";
}
}
class SpecialUser extends User {
public function sayHi(){
echo "I am Special $this->name";
}
}
final
권한
지금까지 수업 시간에 나오는public
- public
- protected
- private
전역에서 액세스 가능
protected는부모 클래스와 클래스 내에서만 접근 가능
private는클래스 내에서만 접근 가능
하도록 되어 있습니다.class User {
public $name;
public function __construct($name){
$this->name = $name;
}
public function sayHi(){
echo "Hello $this->name !";
}
}
class SpecialUser extends User {
public function sayHi(){
echo "I am Special $this->name";
}
}
$name
$gildong
$gildong->name
class User {
private $name;
public function __construct($name){
$this->name = $name;
}
public function sayHi(){
echo "Hello $this->name !";
}
}
class SpecialUser extends User {
public function sayHi(){
echo "I am Special $this->name";
}
}
$this->name
$gildong->name
static 대해
static은 클래스를 인스턴스화없이 사용할 수 있도록하는 구조입니다.class User {
public $name;
public static $count = 0;
public function __construct($name){
$this->name = $name;
self::$count++;
}
public static function getMes(){
echo "Hello from static!";
}
}
User::getMes();
$tom = new User("tom");
echo User::$count; //1
클래스명::메소드
self
self::$count
추상 클래스
abstract class BaseUser{ //추상클래스
public $name;
abstract public function sayHi();
}
class User extends BaseUser{
public function sayHi(){
echo "Hello";
}
}
abstract
interface
그런데, 추상 클래스와 비슷하다 것이interface
interface sayHi {
public function sayHi(); //interface는 절대public
}
interface sayHello{
public function sayHello();
}
class User implements sayHi,sayHello {
public function sayHi(){
echo "Hi!";
}
public function sayHello(){
echo "hello";
}
}
extends
implements
추상 클래스는 하나이지만, interface는 여러 번 추가 할 수 있다
라는 점입니다. 그래서 더 세세한 부품 (걷기, 말하기)을 만드는데는 interface를 사용하여 대부분 (인간, 동물, 자동차 등)을 정의하는 클래스를 사용할 수 있습니다.외부 파일로드
외부 파일로드에 관해서는 파일을 나눠서 설명해 보겠습니다. 먼저 새로운 functions.php를 만듭니다. functions.php에는 다음과 같은 내용이 있다고 합시다.function hello(){
echo "Hello";
}
.......
functions.php
index.php
require "functions.php";
require_once "functions.php";
include "functions.php";
include_once "functions.php";
require "functions.php";
hello();
네임 스페이스
그것을 해결해주는 것이,namespace
입니다. 먼저 사용해보세요. functions.php의 처음namespace gildong\functions;
function hello(){
echo "Hello";
}
// use honggildong\functions as func;
// use honggildong\functions
use honggildong\functions as func
use honggildong\functions
require "functions.php";
use honggildong\functions as func;
func\hello();
예외 처리
이제 종반입니다. 마지막으로, 예외 처리 방법에 대해 정리하고자합니다. 예를 들어, 나눗셈을하는division()
function division($num1,$num2){
return $num1 / $num2;
}
echo division(4,2); // 2
$num2
function division($num1,$num2){
if($num2 === 0){
return "2번째에 0은 지정할 수 없습니다.";
}else{
return $num1 / $num2;
}
}
function division($num1,$num2){
try {
if($b === 0){
throw new Exception("can not use 0");
}
return $num1 / $num2;
} catch (Exception $e) {
return $e->getMessage();
}
}
getMessage()