PHP정리

PHP

중요한부분 ⭐️을 붙임

※ 글로벌 상수

※글로벌 변수

사용예제 (정적변수보다 보관이 짧다)

$g=1;

function plus(){

global $g;

echo $g+=1;

}

plus(); // 2

plus(); // 3

function printGlobal(){

echo $GLOBALS['g'];

}

printGlobal(); // 3

※슈퍼글로벌변수 ⭐️

어디서든 접근 가능한 변수

사용 방법은 위의 글로벌 변수와 같다

자주 사용하는듯

※var_dump ⭐️

-1.변수의 타입을 표기하며 ( int, boolean )

-2.배열일경우 상세내용 표기( array의 상세내용..)

-해당 변수의 상세 내용 표기 (쉽게 말하면 변수의 타입 표기)

-해당 변수에 담긴 배열등을 자세하게 표기

 var_dump("123abc" == 123);    // true

“123abc” 문자열이 입력되어있으므로 true 이고 123 빈값이 아니기때문에 true이다 둘을 합친 내용의 변수형의 true이다

※정적변수 static

함수가 종료되더라도 메모리상에서 남아있다

function count(){

 static $c=0;

 echo $c; $c++;

}

// count(); 0

// count(); 1

※배열 ⭐️

종류1    일반배열 (키가 지정되어있지 않거나 숫자인 경우)

  • $배열이름 = array(); // 배열 생성

  • $배열이름[0] = "apple";  // 배열 요소 추가

  • echo $배열이름[인덱스]; // apple

  • $배열이름 = array(배열요소1,배열요소2); // 배열 생성하면서 초기화를 동시에

  • $신규배열이름[] = "apple";  // 1.신규배열이름라는 배열을 생성한다. 2.배열 인덱스를 생략하여, 순서대로 배열에 추가됨.

  • foreach ($배열 as $값을저장할변수) {} // 일반배열

종류2    연관배열 (키가 문자열이거나 여러 타입인 경우)

-배열이라기 보다 자바스크립트의 Object와 가까운듯

  • $배열이름 = array();        // 배열 생성

  • $배열이름["apple"] = 1000;  // 연관 배열 요소 추가

  • $배열이름 = array("키1" => 값1, "키2" => 값2, …); // 배열 초기화와 추가를 동시에

  • foreach ($배열 as $key => $value) {} // 연관배열

$arr = array(

    1 => "첫 번째 값",   // PHP의 배열에서 키값의 1과 "1"은 같은 값을 나타냄.

    "1" => "두 번째 값", // 같은 키값을 사용하여 두 번 선언했기 때문에 나중에 선언된 "두 번째 값"만 남게됨.

    10 => "세 번째 값",

    -10 => "네 번째 값"

);

echo $arr[1]; //두 번째 값

echo $arr["1"]; //두 번째 값

echo $arr[10]; //세 번째 값

echo $arr[-10]; //네 번째 값

※배열함수

count() , sizeof()  // 길이

sort() //  정렬

//일반배열

sort($arr);

// 연관배열

asort($arr); // 요소의 값을 기준으로 배열 정렬 -> apple, orange, banana
ksort($arr); // 키값을 기준으로 배열 정렬      -> apple, banana, orange

※객체

객체(object)는 클래스의 인스턴스(instance)를 저장하기 위한 타입입니다.

이러한 객체는 프로퍼티(properties)과 메소드(methods)를 포함할 수 있습니다.

class TestClass {

    public $property2="hello2"; // 프로퍼티

    // 생성자 함수 (클래스의 인스턴스)    

    // function TestClass() {} 도 가능

    function __construct() {

        // 클래스에 프로퍼티 초기화

        $this->property1="hello1";

    }

}

$var=new TestClass; // 인스턴스(객체) 생성

echo $var->property1; // 객체의 속성(프로퍼티) 접근 //hello1

echo $var->property2; // 객체의 속성(프로퍼티) 접근 //hello2

※배열->JSON스트링

json_encode($arr)을 이용해서 배열을 json형태의 스트링으로 변경가능

※JSON스트링->배열,std클래스

json_decode($json_string,true)을 이용하면  json문자열을 연관배열로 반환한다

json_decode($json_string)을 이용하면  json문자열을 클래스로 반환한다

※StdClass⭐️

// 1. 빈오브젝트로 프로퍼티만 사용할 시 사용되기도함 

// 2. 그래서 key,value의 배열을 클래스로 바꿀시 stdclass에 프로퍼티를 할당후 stdclass로 사용가능 (동적인 프로퍼티가 사용가능하다)

// 3. new stdClass() ; 등으로 생성이 가능하다

// 4 .프로퍼티에 할당후 ( new stdClass() -> foo = 42; 등으로 할당 )

//  json_encode() -> json_decode()의 변환과정을 거쳐 연관배열로 사용이 가능하다

// json_decode(arr1,args2)에서 args에 아무것도 입력하지않거나 false를 입력할 경우 json문자열의 반환값을 stdClass로 받는다

// 배열의 경우 값 접근시

$dog= [];

$dog['name'] = 'pochi';

echo $dog['name'];

// stdClass의 경우 값 접근시

$dog= new stdClass();

$dog->name= 'pochi';

echo $dog->name;

// stdClass 란 빈 오브젝트임

// 케이스1  ==>  애초에 빈 Object를 생성

$obj = new stdClass();

$obj->foo = 42;

$obj->{1} = 42;

echo var_dump($obj);

—>

object(stdClass)#1 (2) {

  ["foo"]=>

  int(42)

  ["1"]=>

  int(42)

}

//케이스2 ==>  배열을 Object형으로 형변환

$obj = (object) array('foo' => 'bar');

echo var_dump($obj);

object(stdClass)#1 (2) {

  ["foo"]=>

  int(42)

  ["1"]=>

  int(42)

}

※타입변환

 PHP는 기본적으로 문자열이 공백일 경우 false 존재할 경우 true를 반환한다

var_dump를 이용해서 변수에 할당된 상세 정보를 보면 true가 출력됨을 알수있다

$var_01 = "안녕";

$var_01_cast = (boolean)$var_01;

echo var_dump($var_01_cast); // bool(true)

※instanceof 연산자 

instanceof 연산자는 다음과 같은 사항을 확인하고자 할 때 사용할 수 있습니다. 

1. 해당 변수가 어떤 클래스(class)에서 생성된 객체(object)인지를 확인할 때 

2. 해당 변수가 부모 클래스(parent class)에서 상속받은 클래스인지를 확인할 때 

3. 해당 변수가 클래스의 인스턴스(instance)인지 아닌지를 확인할 때 

4. 해당 변수가 인터페이스(interface)로 구현한 클래스의 객체 인스턴스(object instance)인지 아닌지를 확인할 때

※isset() / empty() / unset() ⭐️

isset() // 선언된적이있는지 확인

empty() // 선언된 값이 비어있는지 확인 

                 여기서 비어있다함은 0,빈문자열,빈배열,null,false등이다

unset() // 메모리에 올라간 변수를 제거함

echo var_dump(isset($a));  // 선언된적이 없으므로 false

$a=array();

echo var_dump(empty($a));  // 배열이 비어있으므로 true

echo var_dump(unset($a));  // $a변수를 메모리부터 삭제

※매직매소드

매소드 내부에서 보이지 않지만 정의 되어있음,사용자가 구현해서 사용가능

__메소드명 형식으로 호출함

예를들어 get() 메소드와 set()메소드

클래스의 private된 프라펕티의 값을 설정하거나 읽을수있음

※클래스 접근제어

public // 외부에서 조건없이 사용가능

private로 // 해당 클래스 내부에서만 사용가능

protected로 // 해당 클래스 내부와 상속받은 클래스에서만 사용가능, 외부에서 사용불가

※클래스의 정적멤버 (연산자 ::를 사용) ⭐️

1.static키워드로 선언된 정적 프로퍼티는 인스턴스 객체에서 접근 불가능  // new instanceA()->static_value (x)

2.static키워드로 선언된 정적 메서드는 인스턴스 객체에서 접근 가능  // new instanceA()->static_method() (o)

3.인스턴스없이 직접 호출 가능 //  instanceA::static_value (o)

4.인스턴스없이 직접 호출 가능 //  instanceA::static_method() (o)

5.정적 메서드 내부에서 this사용 불가능 // 그대신 self를 사용한다

—> 즉 인스턴스의 프라퍼티에 직접 접근하는것 이외에는 다 가능하다

6.self::static_val; 현재 클래스의 스태틱 멤버변수접근

7.parent::static_val , parent::static_method() 부모 클래스의 멤버변수나 메소드 접근 

※추상클래스

// 구현해야할 메서드+상속메서드를 같이 넘겨줌

abstract class TestA{

    abstract protected function stop();  // 1.상속한 클래스에서 반드시 구현(오버라이딩)해야함

 

    public function start() // 2. 상속한 클래스에서 상속하게 되는 공통 메소드

    {

        …// 소스 구현..

    }

}

class TestB extends TestA{

  //3. stop()을 구현해야함

  function stop(){

      …소스 구현

  }

  //4. start()는 상속되어있는 상태

}

※인터페이스

// 구현해야할 메서드만 넘겨줌, 상속메서드 입력불가

interface TestA{

    public function stop();  // 1.상속한 클래스에서 반드시 구현(오버라이딩)해야함

}

class TestB implements TestA{

   function stop(){

   // 2. 구현(오버라이딩)함..

   }

}

※추상클래스와 인터페이스의 차이 ⭐️

1.추상클래스는 구현된  메서드와 구현해야할 메서드 2종류를 가질수있음

2.인터페이스는 구현해야할 메서드만 가짐 

3.추상클래스는 메서드상속+구현해야할 메서드 /  인터페이스는 구현해야할 메서드만 가짐

 

Nov 26, 2022 Views 97