2012-10-21 4 views
1

PHP를 배우기 시작한 순간입니다. 죄송합니다. 초보자 용 질문이지만 방법이 어떻게 작동하는지 궁금합니다. 예를 들어, 문자열 시작 부분에 공백을 제거하고 싶다면. 루비에, 내가 뭔가를 부를 것이다 : PHP와 Ruby의 메소드의 차이점

string.strip! 

그러나 PHP에서

, 내가 좋아하는 뭔가를해야 할 것입니다 : 분명히

trim(string); 

를, 루비 버전은 객체 지향의 관점에서 (더 우아 디자인),하지만 PHP와 다른 언어와 같은 자바에 대해 어떻게 작동하는지 궁금하네요. 이 방법으로 함수/메소드를 설계하기위한 이름이 있습니까 (PHP에서)? 그리고 그 방법들은 어디에 정의되어 있으며 왜 그들은 어디서나 접속할 수 있습니까? 많은 감사드립니다!

+3

PHP는 완전히 객체 지향적이지 않습니다. 작성할 수는 있지만 PHP 자체는 아닙니다. 어떤 사람들은 그것을 객체 가능한 자라고 부릅니다. */me 덮개가 달린 오리 * – PeeHaa

+2

더 나은 언어를 너무 많이 보았을 때 PHP를 보지 마십시오. – quantum

+0

@PeeHaa : 충분히 공정하게; 나는 내 의견을 철회 :) –

답변

7

여기에 두 개의 서로 다른 패러다임이 있습니다 객체 지향 프로그래밍 (OOP)과 절차 적 프로그래밍가.

OOP에서 함수는 데이터의 컨텍스트에서 정의되며 클래스으로 캡슐화됩니다. 이러한 기능은 보통 방법이라고합니다. 메소드가 객체 (예 : 클래스의 인스턴스)에 대해 호출되면 메소드는 본래 객체의 상태에 액세스 할 수 있습니다. 따라서 예에서 strip은 이미 호출 된 문자열을 알고 있으므로 추가 인수가 필요하지 않습니다. 함수가 자연스럽게 특정 객체 또는 데이터 집합에서 작동 할 때마다 (예 : strip이 문자열에 작용 함)이 방법으로 인스턴스 메소드로 정의하는 것이 좋습니다.

절차 적 프로그래밍에서 함수는 독립적으로 데이터 구조 (클래스)로 정의되며 작업 할 데이터에 명시 적으로 전달해야합니다. 때때로이 접근법은 실제로 더 자연 스럽습니다. 예를 들어, 어떤 입력을 stdout 또는 유사한 것으로 인쇄하는 print 함수는 자연스럽게 특정 개체 나 데이터와 관련되지 않습니다.

대부분의 현대 언어에는 매우 다양하고 강력한 프로그래밍 패러다임 인 OO 기능이 내장되어 있습니다. Java 및 C#과 같은 언어는 모든 코드가 객체 지향 스타일로 작성되도록 권장합니다. 이러한 언어에서는 문자열과 부동 소수점과 같은 기본 데이터 유형조차도 사실 객체이며 자체 메소드와 상태를 갖습니다. 이것은 모두 유형이 궁극적으로 System.Object (심지어 및 double)에서 상속되고 정의 된 모든 일반적인 방법을 상속하는 C#에서 특히 사실입니다. 이를 통합 유형 계층이라고합니다.

PHP는 OOP와 절차 기능이 궁금합니다. 그것은 절차 적 언어로서의 삶을 시작했으며, OOP는 버전 3에서만 소개되었습니다 (매우 초보적인 의미에서만). PHP5에서 OOP를 비교적 잘 지원하지만, 표준 라이브러리의 대부분은 관련 상태/데이터를 인수로 전달할 것으로 기대되는 함수의 느슨한 컬렉션으로 구현됩니다.그러나 OOP 라이브러리가 점점 보편화되고 있습니다 (예 : mysqli).

+0

자세한 설명을 주셔서 감사합니다. 하지만 절차 적 프로그래밍에서 기능이 어떻게 구성되어 있는지에 대한 한 가지 질문이 있습니다. 클래스에 연결되지 않았으므로 모듈로 그룹화되었거나 모두 정의 되었습니까? 다시 한번 감사드립니다. – maru

+4

언어에 따라 다릅니다. PHP에서는 기본적으로 전역 네임 스페이스에 모두 정의되어 있습니다 (사실 5.3, PHP에는 전역 네임 스페이스 만 있음). 그러나 파이썬에서 예를 들어, 각 모듈은 자체 네임 스페이스를 가지고 있습니다 (일부 특수 함수가 전역 네임 스페이스에 있음에도 불구하고). –

+0

나에게 약간의 혼란을 없애 준 덕분에 다시 감사드립니다! – maru

2

본질적으로 인스턴스 메소드와 클래스/정적 메소드는 다릅니다. 인스턴스 메소드는 클래스의 특정 인스턴스에서 호출되며 해당 인스턴스의 내부 상태에 액세스 할 수 있습니다. 클래스/정적 메소드는 그렇지 않습니다.


"PHP와 Java에서 작동하는 방식"을 묻는 질문에서 무엇이 필요한지 잘 모르겠습니다. 인스턴스 대 비 인스턴스 메소드와 관련하여 Ruby, PHP 및 Java는 모두 거의 동일하게 작동합니다.

+0

내 말은, 어떻게 그것을 직접 trim()과 같은 Class.method 형식처럼 그것을 호출하여 사용할 수있는 건가요? – maru

+1

PHP는 Java와는 달리 함수가 클래스에 묶여 있어야한다는 것을 요구하지 않기 때문에 단지 _allows_입니다. 달리 말해서 : 그것은 단순히 언어가 설계된 방식입니다. 파이썬도 비슷하게 작동합니다. 함수는 클래스의 인스턴스 나 클래스의 인스턴스에 연결될 수 있지만 강제로 될 수는 없습니다. –

관련 문제