[include(틀:상위 문서, top1=PHP)] [include(틀:프로그래밍 언어 문법)] [목차] == 개요 == PHP 의 문법을 설명하는 문서다. 문법의 정보는 PHP 공식 홈페이지 [[http://php.net|PHP.net]]의 영문 매뉴얼을 기준으로 한다. == 편집 지침 == [[소스코드]] 예시 || {{{{{{#!syntax php 소스코드 }}} }}} || PHP 코딩 표준인 PSR-1과 PSR-12를 지켜 주시기 바랍니다. 또한 PHP 7 이후의 내용을 다룹니다. == 기본 문법 == 기본적인 PHP코드는 다음과 같다 각 php파일은 )는 php코드만 있을 경우 붙이지 않는 것이 권장된다.[* PHPStorm 같은 IDE에서부터 [[클래스#s-2.5]] 파일이 아닌 이상 끝태그 뒤에 아무것도 없으면 노란 밑줄이 쳐지고 '끝태그를 없앨 것'을 도움말로 띄울 정도이다.] short_open_tag를 활성화시키면 가 후행할 경우 뿐이다. === 주석 === PHP에서 주석을 처리하는 방법에는 세 가지가 있다. 다른의 주석이 섞여있으면 중첩할 수 없다 3가지 방법이 있지만 // 와 /* 여러줄주석 */ 이 주로 쓰인다. {{{#!syntax php (화살표)|| 왼쪽에서 오른쪽 || 객체의 프로퍼티를 참조한다. || ---------- ||왼쪽 || + , - || || 숫자의 양수 음수표기 예) -3 || ||무관 || ++, -- || || 1증가, 1감소 || ||무관 || ~ || || 비트연산 중 not 연산을 한다. || ||왼쪽 || (int), (float), (string), (bool) (array), (object) || || 괄호안에 적은 타입으로 형변환을 한다. || ||왼쪽 || @ (에러 컨트롤연산자)|| || 코드가 적힌 해당줄에서 일어나는 오류를 무시한다. || ---------- ||왼쪽 || instanceof || || 어떤 클래스에서 생성한 인스턴스인지 확인 true, false 를 반환한다. || ==== 산술 연산자 ==== 연산자 +,-,*,/를 통해 사칙연산을 할 수 있다. 그 외는 다음과 같다. || 연산자 || 기능 || || ** || 왼쪽 수를 오른쪽 수만큼 제곱한다. || || ++ || 1을 더한다. || || -- || 1을 뺀다. || || - || 부호를 바꾼다. || ==== 논리 연산자 ==== 논리 연산자는 다음과 같다. 우선순위 순으로 나열한다. * not (!) * and (&&) * xor * or (||) == 기본 입출력 == 기본 출력은 echo, print(), printf()가 있다. {{{#!syntax php '; // 코드블럭을 일시적으로 닫고 HTML을 직접 작성한다. ?>
}}} 아래와 같은 축약 표현도 많이 쓰이는데, 주로 HTML 코드 속에 PHP 변수를 출력하는 경우에서 널리 쓰인다. 물론 함수를 사용할 수도 있다. PHP 5.3까지는 short_open_tag를 켜지 않았을 경우 예외가 발생하는 문제가 있었다. {{{#!syntax php }}} php://input // 그 밖에 입력 php파일을 서버에서 직접사용하거나 터미널에서 입력할때 file_get_contents('php://stdin'); == 함수 == === 함수의 선언 === 함수선언은 function 키워드로 한다. {{{#!syntax php $x + $y; // 익명함수를 $add 라는 변수에 할당하고 있다. $add(1,2); // 리턴 값 3, 변수에 할당 했으므로 실행할때도 변수를 통해 호출한다. (fn($x, $y)=>$x +$y)(1,2) // 즉시 실행함수로 선언 한 예시 //----------- 아래는 클로저를 이용한 예시이다. $y = 1; $add = fn($x) => $x + $y; // 선언 $add(2); //리턴 값 3 // 실행 클로저는 클로저가 선언된 바깥의 변수를 참조 할 수 있어서 //변수 y의 1과 매개변수 x의 2로 1+2 가 되었다. //위 코드와 같은 코드를 기존문법으로 적으면 $y = 1; $add = function($x) use ($y) //PHP 에서 클로저는 use 키워드를 사용했다. { return $x + $y; } $add(2); //리턴 값 3 }}} === 즉시실행 함수 === * 자기 실행함수 또는 즉시 실행함수라고 부른다. [* IIFE ] 함수를 정의 함과 동시에 바로 실행된다. {{{#!syntax php eatType = $eatType; //객체에 접근할때에는 -> 를 이용한다. $this->legs = $legs; } function getEatType(){ return $this->eatType; } function setEatType($eatType){ $this->eatType = $eatType; } function getLegs() { return $this->legs; } function setLegs($legs) { $this->legs = $legs; } } //초식을 하는 네발 짐승 $animal1 = new Animal("초식", 4); // 객체 생성할때 new 를 쓴다. $animal1->eatType = "잡식"; // $eatType 이 private 이라 접근불가 $animal1->getEatType(); // getter와 setter 를 만들어 접근해야한다. }}} PHP의 객체지향은 PHP 5.2 부터 도입되어 기능이 늘어나고 있다. 클래스는 크게 두가지로 구성되어있다. 데이터와 함수이다. 여기서 클래스의 데이터가 들어갈 변수는 프로퍼티라고 부른다. 함수는 클래스의 프로퍼티를 입출력하거나 조작하는데 메서드라고 부르기도 한다. PHP에서 클래스는 기본적으로 public 이다. PHP 클래스에서 프로퍼티 private, public, protect 로 접근제한자를 지정할 수가있다. 생성자는 fucntion __constructor() 를 쓴다. 생성자란 클래스에서 객체를 생성할때 안에 들어갈 데이터를 어떤값으로 설정하는가? 에대한 방법을 정의한 메서드이다. // PHP 5부터 바뀐 문법.[* PHP 4까지는 클래스명과 동일한 이름의 메소드를 생성자로 삼았다.] 클래스안에서 클래스의 프로퍼티에 접근할때는 "$this->프로퍼티" 를 쓰며 -> 뒤에 $기호를 붙이지 않는다.[* -> 뒤에 $를 붙이는 경우는 상황에 따라 프로퍼티를 달리 취해야 하는 경우이다. 위의 달러 여러 개 쓰는 변수와 비슷한 맥락.] * 클래스에서 객체들의 관계 extends 라는 키워드로 기반(base) 클래스의 기능들을 파생클래스가 이어받을 수있다. 이를 상속또는 계승이라고한다반 위에서 만든 동물(Animal) 클래스와 파생된 bird(새) 클래스를 살펴보자. 어떤 클래스를 파생한 클래스는 원래 클래스를 부모, 파생된 클래스는 자식이라고 표현한다. {{{#!syntax php wings = 2; } function getWings() { return $this->wings; } function setWings($wings) { $this->wings = $wings; } } $비둘기 = new bird("잡식", 2, 2); $삼족오 = new bird("잡식", 3, 2); //Animal 을extends 했기때문에 부모클래스인 Animal 클래스의 메서드를 쓸 수있다. echo $비둘기->getLegs(); // 2 echo $삼족오->getLegs(); //3 }}} === 인터페이스 === 추상 메서드 === 트레이트 === 트레이트는 객체지향에서 여러 클래스를 계승하지 않고 공통되는 부분을 가져다 구성하는것을 뜻한다. 루비언어의 믹스인과 같다. [[분류:PHP]][[분류:프로그래밍 언어 문법]]