PHP에서 stdClass의 속성을 특정 유형으로 캐스팅하는 방법은 무엇입니까?

우리는

다음 StdClass과 같은 것을 상상해보십시오 .

$foo = new stdClass();

$foo->bar = "baz";
$foo->baz = "1";

이제 어떻게 $foo->bazint로 캐스트 할 수 있습니까? 다음을 수행 할 수 있습니다.

$foo->baz = (int) $foo->baz;

그러나 이것은 너무 긴 진술처럼 보입니다. 이 작업을 수행하는 더 짧은 방법이 있습니까?

Markus AO

표준 "작업 단축"은 사용자 기능에서 발생합니다. 짧게 :

function as_int(&$var) {
    $var = (int) $var;
}

as_int($foo->baz);

이 함수를 사용하여 객체의 속성 만 참조로 전달합니다. 함수 내부의 개체에 액세스해야하는 경우에 유용한 약간 더 긴 형식은 다음과 같습니다.

function prop_as_int(object $obj, string $prop) {
    $obj->$prop = (int) $obj->$prop;
}

prop_as_int($foo, 'baz');

두 기능 모두 다음과 같은 결과를 가져옵니다.

var_dump($foo);

/* 
object(stdClass)#2 (2) {
  ["bar"]=>  string(3) "baz"
  ["baz"]=>  int(1)
}
 */

객체는 기본적으로 PHP에서 참조로 전달되기 때문에 여기 에는 return문이나 참조 된 인수 ( &$obj) 가 없습니다 . 예를 들어 값이 숫자 / 숫자인지, 속성이 존재하는지 (두 번째 예에서) 등의 온 전성 검사를 함수에 추가 할 수 있습니다.

대신 사용자 정의 클래스와 int 유형 속성을 사용할 수도 있습니다 stdClass. 엄격한 유형 을 사용한다고 가정하고 유형 적합성을 처리하는 setter를 사용 합니다 . 엄격한 유형을 사용하지 않는 경우 추가 한 속성을 올바른 데이터 유형에 강제로 가져 오는 것은 정말 간단합니다.

class Foo {
    public int $baz;
}

$foo = new Foo();
$foo->baz = "1";

var_dump($foo);

/* 
object(Foo)#2 (1) {
  ["baz"]=> int(1)
}
*/

보시다시피 값은 선언 된 속성 유형으로 자동 변환되었습니다. 당신이 있다면 declare(strict_types = 1);사용, 그것은 그러나 초래 TypeError: Typed property Foo::$baz must be int, string used하고, 솔루션은 유형 확인 / 강요 세터가 될 것입니다. 그러나 효율적으로 구현하는 것은이 답변의 범위를 벗어납니다.

이 접근 방식의 단점은 함수 호출의 오버 헤드가 발생한다는 것입니다. 이는 수천 번 호출하지 않으면 중요하지 않습니다. 다른 상황에서 작업을 자주 반복하고 타이핑을 줄이려는 경우이 작업을 수행하는 것이 좋습니다. 그러나 많은 수의 개체를 반복하는 루프에서이 작업을 수행하는 경우 철자를 입력하십시오. 성능 향상은 문제의 가치가 있습니다.

마지막으로, 속성 이름을 예측할 수없고 계속 사용 stdClass하고 싶지만 모든 숫자 / 정수로 구성된 모든 변수가 int 데이터 유형이어야한다는 것을 알고 있다면 객체가 데이터로 포화되면 다음을 사용하여 속성을 반복합니다. 수표 !is_int($prop) && ctype_digit($prop)숫자로만 구성이 아닌 모든 INT의 속성과 일치, 그 캐스팅되며, 데이터 유형을 int로. 당신도 그것을 함수로 바꾸고 싶을 것입니다 : 그것은 숙제를위한 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Typescript에서 두 개의 ENUM 조합으로 속성 유형을 설정하는 방법은 무엇입니까?

분류에서Dev

@ObservedObject 속성에 대한 유형으로 프로토콜을 정의하는 방법은 무엇입니까?

분류에서Dev

주어진 데이터베이스 테이블에서 특정 유형에 속하는 속성을 정의하는 좋은 방법은 무엇입니까?

분류에서Dev

Rascal에서 값 유형을 Map으로 캐스팅하는 방법은 무엇입니까?

분류에서Dev

Rust에서 바이트 배열을 기본 유형으로 캐스팅하는 방법은 무엇입니까?

분류에서Dev

리스너에서 속성 사용자 정의 유형을 식별하는 방법은 무엇입니까?

분류에서Dev

속성을 수정하기 위해 리플렉션을 사용하여 컨트롤을 유형으로 캐스팅하는 방법은 무엇입니까?

분류에서Dev

PHP에서 정적 속성을 정의하는 방법은 무엇입니까?

분류에서Dev

새 유형으로 속성을 재정의하는 방법은 무엇입니까?

분류에서Dev

typescript에서 특정 키의 일부로 "레코드"유형을 선언하는 방법은 무엇입니까?

분류에서Dev

PHP DOM 파서로 특정 div 이미지에서 alt 속성을 얻는 방법은 무엇입니까?

분류에서Dev

XSD에서 로컬 유형을 정의하는 방법은 무엇입니까?

분류에서Dev

OrderedDict에서 특정 속성을 기준으로 정렬하는 방법은 무엇입니까?

분류에서Dev

Perforce에서 특정 파일 유형 + 속성을 가진 파일을 찾는 방법은 무엇입니까?

분류에서Dev

Bash에서 특정 형식의 열로 목록을 구성하는 방법은 무엇입니까?

분류에서Dev

특정 서비스를 특정 최악의 상황으로 라우팅하도록 iptables를 구성하는 방법은 무엇입니까?

분류에서Dev

Kotlin의 특정 속성을 기반으로 사용자 지정 개체의 Arraylist에서 인덱스를 찾는 방법은 무엇입니까?

분류에서Dev

속성을 통해 유형을 정의하는 방법은 무엇입니까?

분류에서Dev

JSON을 DefinitelyTyped 유형으로 캐스팅하는 방법은 무엇입니까?

분류에서Dev

JavaScript에서 사용자 정의 파일 유형으로 파일을 만드는 방법은 무엇입니까?

분류에서Dev

속성 함수의 반환 유형을 속성 유형으로 추론하는 방법은 무엇입니까?

분류에서Dev

캔버스에서 특정 모양의 속성을 변경하는 방법은 무엇입니까?

분류에서Dev

그리드에서 특정 유형의 셀을 재귀 적으로 식별하는 방법은 무엇입니까?

분류에서Dev

ReSharper를 사용하여 지역에서 특정 유형의 속성을 그룹화하는 방법은 무엇입니까?

분류에서Dev

MemSQL-MemSQL에서 정수 / 십진수 값을 Float로 캐스팅하는 방법은 무엇입니까?

분류에서Dev

Morphia-특정 유형의 속성로드를 무시하는 방법은 무엇입니까?

분류에서Dev

TypeScript에서 배열 유형을 튜플 유형으로 암시 적으로 캐스팅하는 방법은 무엇입니까?

분류에서Dev

AngularJS : 임의 유형에서 속성을 얻는 방법은 무엇입니까?

분류에서Dev

HTML 속성에서 PHP 문자열로 특정 텍스트를 복사하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Typescript에서 두 개의 ENUM 조합으로 속성 유형을 설정하는 방법은 무엇입니까?

  2. 2

    @ObservedObject 속성에 대한 유형으로 프로토콜을 정의하는 방법은 무엇입니까?

  3. 3

    주어진 데이터베이스 테이블에서 특정 유형에 속하는 속성을 정의하는 좋은 방법은 무엇입니까?

  4. 4

    Rascal에서 값 유형을 Map으로 캐스팅하는 방법은 무엇입니까?

  5. 5

    Rust에서 바이트 배열을 기본 유형으로 캐스팅하는 방법은 무엇입니까?

  6. 6

    리스너에서 속성 사용자 정의 유형을 식별하는 방법은 무엇입니까?

  7. 7

    속성을 수정하기 위해 리플렉션을 사용하여 컨트롤을 유형으로 캐스팅하는 방법은 무엇입니까?

  8. 8

    PHP에서 정적 속성을 정의하는 방법은 무엇입니까?

  9. 9

    새 유형으로 속성을 재정의하는 방법은 무엇입니까?

  10. 10

    typescript에서 특정 키의 일부로 "레코드"유형을 선언하는 방법은 무엇입니까?

  11. 11

    PHP DOM 파서로 특정 div 이미지에서 alt 속성을 얻는 방법은 무엇입니까?

  12. 12

    XSD에서 로컬 유형을 정의하는 방법은 무엇입니까?

  13. 13

    OrderedDict에서 특정 속성을 기준으로 정렬하는 방법은 무엇입니까?

  14. 14

    Perforce에서 특정 파일 유형 + 속성을 가진 파일을 찾는 방법은 무엇입니까?

  15. 15

    Bash에서 특정 형식의 열로 목록을 구성하는 방법은 무엇입니까?

  16. 16

    특정 서비스를 특정 최악의 상황으로 라우팅하도록 iptables를 구성하는 방법은 무엇입니까?

  17. 17

    Kotlin의 특정 속성을 기반으로 사용자 지정 개체의 Arraylist에서 인덱스를 찾는 방법은 무엇입니까?

  18. 18

    속성을 통해 유형을 정의하는 방법은 무엇입니까?

  19. 19

    JSON을 DefinitelyTyped 유형으로 캐스팅하는 방법은 무엇입니까?

  20. 20

    JavaScript에서 사용자 정의 파일 유형으로 파일을 만드는 방법은 무엇입니까?

  21. 21

    속성 함수의 반환 유형을 속성 유형으로 추론하는 방법은 무엇입니까?

  22. 22

    캔버스에서 특정 모양의 속성을 변경하는 방법은 무엇입니까?

  23. 23

    그리드에서 특정 유형의 셀을 재귀 적으로 식별하는 방법은 무엇입니까?

  24. 24

    ReSharper를 사용하여 지역에서 특정 유형의 속성을 그룹화하는 방법은 무엇입니까?

  25. 25

    MemSQL-MemSQL에서 정수 / 십진수 값을 Float로 캐스팅하는 방법은 무엇입니까?

  26. 26

    Morphia-특정 유형의 속성로드를 무시하는 방법은 무엇입니까?

  27. 27

    TypeScript에서 배열 유형을 튜플 유형으로 암시 적으로 캐스팅하는 방법은 무엇입니까?

  28. 28

    AngularJS : 임의 유형에서 속성을 얻는 방법은 무엇입니까?

  29. 29

    HTML 속성에서 PHP 문자열로 특정 텍스트를 복사하는 방법은 무엇입니까?

뜨겁다태그

보관