Notice
Recent Posts
Recent Comments
Today
Total
05-12 00:06
Archives
관리 메뉴

Jeongchul Kim

PHP 함수와 객체, 클래스 본문

Web프로그래밍

PHP 함수와 객체, 클래스

김 정출 2016. 2. 15. 14:03



PHP 함수와 객체, 클래스


◆ 코드 재활용의 장점

 1. 비용의 측면 : 만드는 시간보다는 유지 보수, 검사 및 문서화 작업에 더 많은 시간이 소요된다.

 2. 신뢰의 측면 : 어떤 코드 블록이 사용되고 있다면, 그 코드 블록은 믿을 만 하다.

 3. 일관성의 측면 :  코드를 재활용할 시에 일관성을 유지할 수 있다.


◆ require()와  include() 사용하기

 -> 두 함수는 지금 스크립트에 다른 파일(php문,일반 문장,html 태그, 함수, 클래스 등)을 불러온다.

 1. require() : 실패 시 치명적 오류 발생

 2. include() : 가벼운 경고를 낸다.

 ex) require(‘@@@.php’);



◆ 함수 호출하기

 함수명();


◆ 함수 만들기

 function 함수명() { 명령문; }



◆ return 키워드 : 반환


return 문은 함수 실행을 끝낸다. 모두 실행되었거나, 실행되기 이전에도 함수 실행을 종료되며 반환된다.

<?php

function my_function()

{

return "Hi";

}

?>


◆ 파라미터 parameter : 함수의 인수

 function 함수명(parameter) { 명령문; }


<?php

function sum($num1, $num2)

{

return $num1+$num2;

}

$a = 1;

$b = 2;

$x = sum($a,$b);

echo $x;

?>


함수의 인자로 넘겨주는 세 가지 방법

1. 값에 의한 인자 전달 (pass-by-value)

기본적인 방법으로 함수를 호출할 때 인자를 직접 값으로 전달하는 것을 말한다.

함수 안에서 값을 수정해도 값 자체가 변경되지 않는다.

<?php

function swap($num1, $num2)

{

$temp = $num1;

$num1 = $num2;

$num2 = $temp;

}

$a = 1;

$b = 2;

echo "$num1, $num2";

swap($a,$b);

echo "$num1, $num2";

?>


2. 참조에 의한 인자 전달 (pass-by-reference)

함수에 원본을 전달해주는 것과 같다. 함수 내에서 값을 수정하면 원본의 내용까지 수정된다.

인자 앞에 &(엠퍼센트) 기호를 붙인다.

<?php

function swap(&$num1, &$num2)

{

$temp = $num1;

$num1 = $num2;

$num2 = $temp;

}

$a = 1;

$b = 2;

echo "$num1, $num2";

swap($a,$b);

echo "$num1, $num2";

?>


3. 기본 인자 값

함수의 인자에 기본 값(default)을 설정하는 것이다. 인자가 넘어온다면 기본 값은 무시된다.

<?php

function my_blog($url = "http://jungchul.tistory.com")

{

return "Blog address : $url<BR>";

}

echo my_blog();

echo my_blog("http//smartwheel.kr");

?>



◆ 함수 범위

 1. 함수 안에서 선언된 변수는 선언된 시점 부터, 함수의 끝까지 사용할 수 있으며, 이런 변수는 지역변수

 2. 함수 밖에서 선언된 변수는 함수 안에서 사용할 수 없다. 이러한 변수를 전역변수, 범위는 전역범위

 3. 특별한 수퍼글로벌 변수는 함수 안팎에서 사용 가능하다.

 4. 함수 안에서 global를 붙여서 변수를 선언한 변수는 전역 범위를 가진다.

 


◆ 객체 (object)

 객체 지향 프로그래밍(OOP)이나 설계에서, 데이터(실체)와 그 데이터에 관련되는 동작(절차, 방법, 기능)

 을 모두 포함한 개념.

 1.  속성(attribute) : 객체와 관련된 특성이나 변수

 2. 연산(operation) : 객체 자신을 바꾸거나, 외부적 효과가 나타나는 메소드(method), 동작(action),

   함수 등을 말한다.


◆ 다형성(polymorphism)

 객체의 특징보다는 동작의 특징으로서, 작성코드를 수정하지 않고 다양한 자료형의 객체를

 처리하도록 하는 기법


◆ 캡슐화(encapsulation)

  객체의 자료와 행위를 하나로 묶고, 실제 구현 내용을 외부에 감추는 것.


◆ 상속(inheritance)

 객체(object)의 새로운 클래스(class)를 정의할 때 상위 또는 부모 클래스의 데이터 구조와 메소드

 (method)를 그대로 이어받을 수 있는 개념으로 객체 지향의 가장 큰 장점인 소프트웨어 재사용을

 지원할 수 있다.



◆ 클래스의 구조

class classname { }

<?php

class human {   

public $name; // 속성   

public $age;   

function eating() {} // 메소드

}

?>



◆ 생성자 constructor

 객체가 호출되어 초기값을 주거나, 객체에 필요한 다른 객체를 만드는 등 초기화 작업을 수행한다.

 자동 호출되며, 직접 호출도 가능하다.

  function __construct() {}


◆ 소멸자 destructor

 클래스가 없어지기 전에 해야 하는 일들, 참조를 지우는 등 소멸자에서 한다.

 소멸자는 파라미터를 가지지 못한다.

 function __destruct() {}



◆ 인스턴스 생성하기

클래스를 선언하고 난 후, 클래스의 특정한 개체를 만들기 위해 인스턴스를 생성한다.

new 키워드 사용

<?php

class human {   

public $name; // 속성   

public $age;   

function eating() {} // 메소드

}

$jungchul = new human();

?>




◆ 캡슐화를 통한 속성 접근

 1. __get() : 외부에서 속성 값 가져오기

   function __get($name) { return $this->$name; }

 2. __set() : 외부에서 속성 값 변경하기

   function __set($name,$value) { $this->name = $value; }


<?php

class human {   

public $name; // 속성   

public $age;   

function eating() {} // 메소드

function __get($name) { return $this->$name; }

function __set($name,$value) { $this->name = $value; }

}

$jungchul = new human();

?>



◆ 접근 제어하기

 기본적으로 접근 제한자를 지정하지 않을 시 defaul로 public 변수로 선언된다.

 1. public : 클래스 안, 밖에서 모두 접근 가능하다.

 2. private : 클래스 내부에서만 접근 가능하여, 속성 접근 시 위의 __get(), __set()로 접근한다.

   * 상속된 클래스에서도 사용 불가

 3. protected : 클래스 내부에서만 접근 가능하며, 상속된 하위 클래스에서도 접근 가능



◆ 클래스 연산 호출하기 ( 메소드 호출하기 )

<?php

class human {   

public $name; // 속성   

public $age;   

function eating() {} // 메소드

function __get($name) { return $this->$name; }

function __set($name,$value) { $this->name = $value; }

}

$jungchul = new human();

$jungchul.eating();

?>


◆ 상속하기

 extends 키워드 사용

 class human extends man { }


◆ 오버라이딩 overriding

 속성과 연산에 대해 다른 용도로 재선언 하는 것

 class A {

   public $attribute = “default value”;

   function operation() { echo “hello”; }

 }

 class B extends A{

   public $attribute = “different value”;

   function operation() { echo “bye”; }  }




◆ final 키워드를 사용하여 상속과 오버라이딩 막기

 final class A {}  // 상속을 막는다.

 class A {

   final function operation() {}  // 오버로딩을 막는다.

 }


◆ php는 클래스에서 다중 상속을 지원하지 않는다.


◆ 인터페이스

 다중 상속이 가능하다.

 인터페이스 생성 시 키워드 interface 사용,  인터페이스를 상속 시 키워드 implements 사용

 interface Displayable { function display(); }

 class Pen implements Displayable {

   function display() {}

 }



◆클래스 당 상수

 상수는 키워드 const를 사용핟나.

 클래스를 생성하지 않아도 사용할 수 있다. 접근 ‘::’연산자를 이용하여 접근한다.

 class Math {

   const pi = 3.14159;

 }

 echo Math::pi;


◆정적 메소드 구현하기

 정적을 구현하기 위해 키워드 static을 사용한다.

 static을 사용하면 클래스를 생성하지 않고도 호출할 수 있다.

 class Math {

   static function squared($input) { return $input*$input; }

 }

 echo Math::squared(8);

 


◆ 클래스 타입 검사

 객체에 대한 클래스의 타입을 검사할 때 키워드 instanceof 를 사용한다.

 특정 클래스의 인스턴스인지, 클래스를 상속 받았는지, 인터페이스를 구현 하였는 지 알 수 있다.

 ($b instanceof B) -> true를 반환한다.


◆ 객체 복사

 현재 존재하는 객체는 키워드 clone 으로 복사할 수 있다.

 동일한 클래스, 동일한 속성 값을 가지는 복사본을 만들 수 있다.

 $c = clone $b;


◆ 추상 클래스 사용하기

 인스턴스를 만들 수 없는 추상 클래스와 프로토 타입은 가지고 있지 않은 추상 메소드를 만들 수 있다.

 키워드 abstrac를 사용

 추상 클래스나 추상 메소드는 하위 클래스에서 구현하고, 오버라이딩 해야한다.

  


'Web프로그래밍' 카테고리의 다른 글

PHP 파일 입출력  (0) 2016.02.15
PHP 예외 처리 Exception  (0) 2016.02.15
PHP 입력과 출력, include와 require  (0) 2016.02.15
PHP 제어문 반복문(if-else for while)  (0) 2016.02.15
PHP 문법 주석, 변수, 연산자  (0) 2016.02.15
Comments