2011-02-23 4 views
4

필자는 잠시 동안 PHP로 코딩을 해왔고, 프로 시저 함수 (특히 문자열과 배열)의 불일치에 비교적 염려했습니다. 배열과 같은 객체 ISN '을 만들기Object Oriented PHP에는 어떤 기본 객체가 빠져 있습니까?

$arr = new Array('foo', 'bar'); 
$item = $arr->pop(); 

: 개체에 대한 지원으로

, 나는 내가 좋아하는 코드를 작성할 수 있도록 PHP는 객체로 배열 및 문자열의 기본 구현을 한 것으로 희망했습니다 지나치게 어렵지 만 상당한 성능 저하가 있습니다. 어쨌든 배열 구성을위한 래퍼 만 존재하게 될 것입니다.

기타 PHP는 객체 지향 PHP에 있어야하는 핵심 객체가 있습니까?

편집 추가 :

회원님이 객체로 배열을 사용하는 방법에 대한이다; 실제로, 나는 구체적으로 을하지 않습니다.은 질문에 대한 대답이 아닌 답의 배열에 대한 토론을 원합니다. 예를 들어 배열을 사용했는데 아무도 질문을 읽지 않는 것 같습니다. 나는 다른에 관심이 있습니다. 클래스/객체는 핵심 PHP에 기본적으로 존재해야합니다.

+1

적어도 Array 예제에는 ArrayObject와 SplStack이 있습니다. 어쩌면 오는 SplString은 유사한 기능과 문자열을위한 메소드 API를 추가 할 것입니다. 그러나 함수가 퍼스트 클래스 객체가 아니면, 모든 기본 유형을 객체로 표현하는 데 사용량이 적습니다. (PHP는 Java OOP 기능을 흉내 내기보다는 파이썬을 따라 가면서 더 나은 결과를 얻었을 것입니다.) – mario

+3

[SPL] (http://php.net/SPL)을보십시오. 특이성,'ArrayObject'. –

+0

나는 근본적인 물체에 관심이 없다. 오히려 객체를 다른 기본 유형 (int, float, boolean 등)으로 변환하는 지원을 보게됩니다. SPLInt가 있으면 필요하다면 조용히 변환 할 수 없다면 누가 신경 써야합니까? – ircmaxell

답변

2

편집 : 그것은 aoutoboxing 와 PHP 6 가능할 것이다 컴파일러 프리미티브 (기본) 타입 및 해당 객체 래퍼 클래스 (예를 들어, 어레이 ArrayObject 더블 더블 사이하게 자동 전환은, 기타).

function __autobox($value) 
    { 
     switch(gettype($value)) 
     { 
      case 'integer': 
       return new MyIntegerObject($value); 
       break; 

      case 'array': 
       return new ArrayObject($value); 
       break; 

      default: 
       $stdObj = new stdClass(); 
       $stdObj->value = $value; 
       return $stdObj; 
       break; 

     } 
    } 

예 사용 : 은 특수 기능의 이름 __autobox() 예를 들어

<?php 
function __autobox($value) { 
    return ... /* some object */ 
} 
?> 

이 될 것

var_dump(5 == new MyInteger(5)); 
bool(true) 
+0

질문은 배열을 객체로 사용하는 방법에 관한 것이 아니라 ArrayObject, ArrayAccess, Countable, IteratorAggregate 등에 대해 이미 알고 있습니다. 이러한 객체/인터페이스를 사용하는 것은 배열의 * 래퍼 * 역할을합니다. 독립 개체로. – zzzzBov

+1

오, 죄송합니다. php 6.0에서는 [autoboxing] (http://wiki.php.net/rfc/autoboxing) –

+2

으로 PHP 6을 사용할 수 있습니까? 조금도. * * 최대 절전 모드로 돌아 가기 * * – erisco

2

당신은 PHP가 적어도 변환하거나해야한다고 주장 할 수 일부는 원주민을 객체와 동등하게 사용하기 쉽고 사용하기 쉬운 관점에서 확장하지만 SPL은 대부분의 우리가 필요로하는 것들은 아무도 정말로 불평하지 않습니다. 배열로 작업하는 방식은 충분히 유연하며 불필요한 메모리를 소비하지 않습니다.

내가 PHP를 선택하게되면 모든 배열을 객체로 변환하는 대신 배열 API로 간소화해야합니다. 왜 array_map과 asort입니까? array_sort를 예로 들어 보겠습니다. Php6에서이를 수정하고 실제로 Scott McVicar와 Derick Rethans에게 몇 달 전에 물어볼 기회가 있었으며 그들은 거꾸로 된 호환성과 큰 사용자베이스에 분노를 줄 것이라고 응답했습니다. 멍청한 대답이지만 이야기의 끝은 두렵다.

그러나 질문에 대답하기 위해 ... 나는 PHP가 기본 객체를 언어 객체로 채택해야한다고 생각하지 않습니다.

+1

"원래의 Array (또는 다른 모든) 객체 구현이 문제를 해결할 수있는 이유는 * 거꾸로 된 호환성과 큰 사용자베이스에 분노를 줄 것입니다. 새로운 객체는 일관성을 염두에두고 설계 될 수 있으므로 일관성없는 함수에 제약을받지 않습니다. – zzzzBov

+0

당신은 나를 설득 할 필요가 없습니다 ... PHP 핵심 팀과 이야기하십시오 :) – ChrisR

관련 문제