PHP에서 객체 지향 방식으로 데이터를 전달하는 방법은 무엇입니까?


11

MVC 프레임 워크 (예 : CodeIgniter)로 작업 할 때도 정기적으로 객체가 아닌 중첩 배열을 전달한다는 것을 알았습니다.

이것은 객체 지향에 대한 나의 이해를 따르지 않습니다. 예를 들어, 코드를 Java로 이식한다면 배열 (또는 벡터 등)을 전달하는 것을 꿈꾸지 않을 것입니다.

이것이 데이터를 처리하는 적절한 방법인지 궁금합니다. PHP에서 배열이 이와 같이 전달되는 이유가 있습니까? 아니면 객체가 사용되지 않는 이유는 무엇입니까? 데이터를 전달하는 가장 좋은 방법은 무엇입니까?

답변:


8

Java의 OO를 PHP와 혼동하지 마십시오. Java는 단일 패러다임 언어이므로 OO 만 수행합니다. 반면에 PHP는 다중 패러다임 언어입니다. 함수형 프로그래밍이나 OO 또는 둘 다를 수행 할 수 있습니다.

이제 OO의 "나쁜"구현과 같은 것은 없습니다. Java의 OO는 다른 모든 언어가 따라야하거나 따라야하는 결정적인 구현이 아닙니다. 몇 가지 결정적인 개념이 있으며 두 언어 모두 자체 방식으로 완전히 구현합니다 (처음부터 Java, 버전 5 이후 PHP).

따라서 귀하의 질문에 대답하기 위해 : CI가하는 일과 함께하는 일은 PHP 세계에서 옳습니다. PHP의 배열은 가장 유연하고 유용한 구조 중 하나이며 실제로 데이터가 정보 일 때 객체보다 배열을 사용하는 것이 좋습니다 (논리를 수행하지 않음). 완전 OO 코드는 "OO 코드 만"과 다릅니다.

PHP로 시작하는 경우 좋은 OO 사례에 대한 참조로 Java를 사용하지만 "Java가 다르게 수행"하기 때문에 PHP에 대한 이해를 제한하지 마십시오. 당신은 정말로 둘 다 망칠 수 있습니다. 패러다임은 개념을 얻지 못하면 당신을 구할 수 없습니다.

어쨌든 Java를 개인적으로 선호하여 웹 개발을 위해 Ruby를 확인하면 Java와 조금 더 밀접한 관련이 있습니다.


Java OO를 PHP OO와 혼동해서는 안되는 이유는 무엇입니까? PHP에는 기본 배열 / 해시 데이터 유형이 있다는 점을 제외하면 거의 동일합니다.
Martin Wickman

구현은 매우 유사합니다. 나는 그들이 두 언어로 어떻게 사용되는지 언급하고 있었다.
yannis

OOP에 문제가 있습니다. 하나의 객체가 다른 객체에 의존하는 응용 프로그램 (PHP베이스)에 대한 OOP 디자인을 만들고 싶습니다. PHP에서 이것을 어떻게 처리합니까? plz 도와주세요 ...
Imran Khan

시나리오 예 : Hotel 객체에는 Room 객체가 있습니다. 여기서 Room 객체에는 Date 객체 ...가 있고 Date 객체에는 사람 유형에 대한 가격이 있습니다. 이제 OOP 기반으로 PHP에서 이러한 유형의 시나리오를 처리하는 방법 (각 레벨에서 처리해야하는 큰 데이터가 있기 때문에).
Imran Khan

@Walter 나는 당신의 응답을 기다리고 있습니다 .... PLZ 도와주세요.
Imran Khan

2

객체가 OO 패러다임이 아니기 때문에 배열 대신 객체를 사용하는 것은 개인적인 취향 일뿐입니다. :)

객체는 IDE에서 편리한 코드 완성을 제공하며 인터페이스 (유형 힌트) 및 상속을 사용할 수 있습니다.

이점을 볼 수 있기 때문에 배열 대신 객체를 사용하려는 경우 사용하십시오. 그러나 객체이기 때문에 사용하려는 경우이 리팩토링에 시간을 낭비하지 마십시오. :)


" 배열과 마찬가지로 사용 개체는 더 많은 메모리와 CPU를 사용합니다. "항상 그런 것은 아닙니다. 배열과 동일한 양의 데이터를 보유하는 객체는 거의 정확히 같은 양의 메모리를 차지합니다.
yannis

@Yannis Rizos, 예, 객체는 편집 된 메모리를 덜 사용할 수 있습니다.
OZ_

메모리를 적게 사용할 수있을뿐만 아니라 시스템의 다른 메모리 성능 측면과 객체 사용의 이점에 비해 사소하기 때문에 메모리 사용과 관련이 없습니다. 메모리 사용량이 너무 많으면 객체를 사용하지 않을 것입니다. 우리가 관심을 갖는 것은 객체가 시스템을 추론하고 구성 할 수있는 더 나은 도구를 제공한다는 것입니다.
Rein Henrichs

@Rein Henrichs, 알고 있습니다. 감사합니다. 그래서 '메모리'에 대한 모든 단어가 내 대답에서 제거되었습니다. 바보 같은 최적화를 시도하지는 않지만 objects just because they are objects리팩토링의 이유는 아닙니다. :) 의견뿐만 아니라 내 대답을 읽으십시오.
OZ_

공평하게, 나는 편집하기 전에 논평했다.
Rein Henrichs

1

OO 시스템에서는 실제로 데이터를 전달하지 않고 개체 를 전달 합니다 . 차이점은 개체에는 데이터뿐만 아니라 동작도 포함된다는 것입니다. 따라서 데이터 지향이 아닌 객체 지향이라고합니다.

데이터에 대한 행동이 필요하지 않은 한 일반 오래된 PHP 배열은 가치 객체만큼이나 좋습니다 (또는 관점에 따라 나쁨).


0

필자는 이것이 조정의 문제라고 생각합니다. 프로그래밍에는 "객체"가 많이 구현되어 있습니다. Python과 Javascript는 놀랍도록 다른 속성을 가지고 있습니다. PHP OO는 해킹 일 것입니다. PHP 배열은 전통적인 의미에서 "객체"가 아니지만 분명한 목적을 제공합니다. 데이터에 사용자 정의 BEHAVIOR가 필요하지 않으면 왜 오브젝트를 사용합니까?

편집하다:

다시 : 불변의 값 객체

http://bradley-holt.com/2010/09/immutable-value-objects-in-php/


데이터에 안정적인 구조를 제공합니다. 그렇습니다. 배열의 특정 형식 / 중첩을 출력하는 함수를 만들 수 있지만 누가 약간 수정 한 다음 전달하는 다른 함수를 작성하지 않습니다.
Matthew

1
예를 들어, 파이썬 튜플과 같은 PHP는 없기 때문에 변수 액세스를 보호하기 위해 객체가 필요합니다. 그러나 거기에 당신은갑니다-당신은 문제를 정의했습니다, 당신은 언어에 사용 가능한 구문을 사용하거나 ... "질식"과 함께 사는 법을 배워야합니다. 문제에 대한 흥미로운 토론이있는 초기 게시물에 대한 링크를 추가했습니다.
sunwukung
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.