Programming/PHP(더이상쓰지않음) 8

[스크랩]디자인 패턴에 대하여

한때 소프트웨어 개발에서 모든 논의의 핵심은 디자인 패턴(Design Pattern)이었다. 개발자들은 밤을 세워가며 객체(Object), 응집도(Cohesion), 결합도(Coupling)에 대해 진지한 토론을 벌이기도 했다. 패턴이라고 하는 것은 일정한 형태나 양식 또는 유형을 의미한다. 소프트웨어를 설계할 때 패턴을 모르는 개발자는 자질(?)이 있는지 의심하는 정도의 분위기였다. 객체지향(Object-oriented)을 공부해야 하는 사람은 반드시 넘어야 할 산(山)이 디자인 패턴이었다. 그러나 어느 순간부터 개발현장에서 디자인 패턴을 논의하는 모습을 보기 어렵다. 디자인 패턴이 무엇인지 모르고 프로그래밍하는 개발자도 있다. 왜, 이런 현상이 발생하고 있을까? 국가에는 헌법이 있고, 기독교에는 성서..

[PHP]sanitize_key() 함수

sanitize_key() 함수는 아래와 같이 정의되어있다. function sanitize_key( $key ) { $raw_key = $key; $key = strtolower( $key ); $key = preg_replace( '/[^a-z0-9_\-]/', '', $key ); /** * Filters a sanitized key string. * * @since 3.0.0 * * @param string $key Sanitized key. * @param string $raw_key The key prior to sanitization. */ return apply_filters( 'sanitize_key', $key, $raw_key ); } 모든 문자를 소문자로 변경하고, 정규표현식을따라서..

[PHP]::(double colon, Paamayim Nekudotayim)과 ->(arrow)의 차이

::는 정적 context에 사용된다. 어떠한 메소드나 프로퍼티가 static으로 선언될때 사용되는데 아래 예제를 참고하자 class Math { public static function sin($angle) { return ...; } } $result = Math::sin(123); -> 는 반대로 동적 context에서 사용된다. 아래 예제를 참고하자. class Hello { public function say() { echo 'hello!'; } } $h = new Hello(); $h->say(); 나는 참고로 ->는 ~안에 있는 이라고 해석 하는데, A->B라면 A안에 있는 B라고 생각을 하면 조금더 쉽게 이해할 수 있는 것 같다. 배운지 얼마 되자 않은 지식이라 잘못된 부분이 있을 수있습니..

[PHP]객체 상속(extends)에 대하여

클래스를 만들면 서브클래스를 파생할수 있는데, 서브클래스를 사용하면 코드 재작성을 어느정도 막아준다. 이럴때 extends를 사용하여 상속을 한다. extends를 사용하면, 서브클래스에서 부모클래스의 속성을 사용할 수 있다. $instance = new CHILD; // CHILD 객체 생성 // name 속성에 SeungSAMI 대입 $instance->name = "SeungSAMI"; // password 속성에1234567890 대입 $instance->password = "1234567890"; // CHILD 객체의 display 함수 실행 $instance->display(); // Name : SeungSAMI Pass : 1234567890 출력 class A{ // A 객체 publi..

[PHP]정적(static)에 대하여

instance간에 서로 데이터를 공유해야 할 경우 이러한 데이터를 static 멤버라고 한다. static멤버에는 변수와 메소드가 존재 하는데 class::변수명 으로 접근을 한다 ::는 스코프 해결 연산자이다. 이 ::는 static과 같은 클래스의 재정의된 프로퍼티나 메소드에 접근할수 있도록 해주는 토큰이다. 정적 메소드의 호출은 마찬가지로 class::메소드명() 으로 접근한다. 정적메소드란 객체로부터가 아닌 클래스로부터 호출되는 메소드를 의미한다. 이 정적 메소드는 어떤 객체 속성에도 접근성을 갖지 않는다. class A { static function print_hello() { echo "Hello World!"; } } A::print_hello(); // A클래스의 static형 prin..

[PHP]include와 require의 차이

두 함수 모두 구문이 여러파일로 나누어진 코드를 불러오는 기능을 가지고 있다. 두 함수는 아무 에러 없이 실행을 마친다면 차이점이 존재하지 않지만, 에러가 발생하는 경우에는 처리하는 방법이 각각 다르다. 간단하게 두 함수를 구분하여 보자 require() 에러 상황시에 Fatal error를 발생시키고, 코드의 실행을 중지시킨다. 그러므로 예외상황 발생시 코드를 중단해야 하는 경우에서 사용되고, 특히 DB나 필수 로직을 점검해야하는 코드를 포함하고 있는 경우에 사용하자. include() 에러 상황시에 경고를 발생시키고, 나머지 코드의 실행을 진행한다. 그러므로 단순하게 화면 출력을 위한 공통적인 파일을 포함할때 사용해서 코드가 진행하는데 막힘이 없게 할때 사용하자. 추가로, 뒤에 once가 붙는 구문의..

[PHP]추상(abstract)에대하여

추상(abstract) 추상 메소드 : 추상 메소드란 메소드의 시그니처만이 정의된 비어있는 메소드를 의미 메소드의 시그니처만 정의 되어 있고 이 메소드의 구체적인 구현은 하위 클래스에서 오버라이딩 해야 한다는 의미다. 이렇게 내용이 비어있는 메소드를 추상 메소드라고 부른다. 추상 메소드를 하나라도 포함하고 있는 클래스는 추상 클래스가 되고, 자연스럽게 클래스의 이름 앞에 abstract가 붙는다. abstract class A{ public abstract function b(); } 위의 예제는 추상클래스의 선언과 추상메소드의 선언이다. public abstract function c(){echo "Hello wordl!"} 위의 예제의 경우 추상메소드가 시그니처만이 정의 된 것이 아닌 본체가 정의 되..