2012-02-23 1 views
4

필자는 반년 동안 PHP로 글쓰기를 해왔으며, 전문가로서의 길은 멀었습니다. 필자는 필자가 원하는대로 스크립트를 만들 수있었습니다. 나는 객체 지향적 인 배경에서 왔고 이것은 PHP가 기본 라이브러리에서 거의 사용하지 않는 것처럼 보입니다.PHP가 기본 라이브러리에서 객체를 사용하지 않는 이유는 무엇입니까?


대부분의 외부 라이브러리는 내가 사용하거나 만들었으며 객체 지향 디자인으로 작동하지만 기본값은 다음 예제를 사용하는 것 같습니다.

$file_handle = new FileStream("/path/to/file.txt"); 
$content = $file_handle->read(); 
$file_handle->close(); 

: 이런 식으로 뭔가를 보이는 디자인을 사용하는 것이 더 나을, 나에게 지금

$file_path = "/path/to/file.txt"; 
$file_handle = fopen($file_path, "w+"); 
$content = fread($file_handle, filesize($file_path)); 
fclose($file_handle); 

: 나는 예를 들어 파일/쓰기 읽기 프로세스를 사용합니다

동일한 생각이 문자열, 배열, cURL, MySQL 쿼리 등에 적용되므로 확실한 추론이있을 것입니다. 나는 그것이 무엇인지 알기를 바랍니다.

따라서 핸들 또는 리소스를 첫 번째 매개 변수로 사용하여 고유 한 기능을 작성하는 것이 더 나은 경우.

object_method($handle, $value); 

그럼 왜 가장 인기있는 (외부) PHP 라이브러리를 사용하는 것을 선호합니까 :

$object->method($value); 

그리고 내 자신의 라이브러리와 응용 프로그램을 작성할 때 사용되어야 하는가?

+1

PHP의 OOP는 비교적 새롭고 이후의 5.x 버전에서만 유용하기 때문에. PHP는 드래그 할 수있는 ** 수하물이 ** 많이 ** 있습니다. –

+0

저자를 대변 할 수는 없지만 제 추측은 기존의 이유입니다. 작동한다면 끊지 마라. –

+0

S.O 유형의 질문이 아닙니다. –

답변

2

PHP가 처음 작성되었을 때 객체가 없기 때문입니다. OO에 기본 PHP 기능을 포함하는 여러 라이브러리가 있습니다. MFC와 마찬가지로 C++ 클래스가있는 기본 C Windows API를 포함합니다.당신이 Kohana 같은 framwork를 사용하는 경우 http://kohanaframework.org/3.0/guide/api/File

여기 Kohana 전체 API를 http://kohanaframework.org/3.0/guide/api/

의 파일 래퍼를 좋아에 대한

, 그것은 그 래퍼를 많이 제공

1

PHP는 최근까지 OOP 언어가 아니 었습니다.

실제 OOP는 v5.x에서만 나타났습니다. 이전 버전과의 호환성을 이유로 모든 이전 기능이 남아 있으며, 노후 기능이 잘 작동 할 때 새로운 것을 개발해야하는 이유는 무엇입니까?

즉, 일부 도서관에는 OOP 대안이 있습니다. 예 : 레거시 프로 시저 스타일 mysql 라이브러리를 대체하는 PDO 라이브러리가 있습니다.

1

PHP는 원래 공식적인 잘 정의 된 OO 언어가 아닌 HTML 페이지에 동적 텍스트를 추가하는 간단한 방법으로 작성되었습니다. PHP 5O가 매우 제한적일 때까지. Zend (PHP 작성자와 유지 관리자)는 높은 수준의 하위 호환성을 보장하기를 원합니다. PHP에서 웹의 큰 부분이 실행되기 때문입니다.

점점 더 많은 기능이 각 새 릴리스마다 공식 OO 래퍼 클래스를 가져옵니다. 일부는 pecl 또는 pear add ons를 통해 점점 더 많은 기능을 제공합니다. 가능한 경우 OO 버전을 사용하는 것이 좋습니다.

자바를 말하는 정도까지 100 % OO PHP를 보게 될지 의심 스럽습니다.

0

이전 버전과의 호환성은 확실합니다. ter 어딘가에 방정식. 핵심 PHP 개발자가 "실수"라고 인정하더라도 PHP는 널리 구현되어 있으므로 실행 취소하기가 매우 어렵습니다. 날짜 함수와 DateTime 클래스는 PHP가 업그레이드 경로를 깨지 않고 사용법을 향상시키려는 좋은 예입니다.

+0

왜 downvote? –

1

심지어 일부 질문은 이해할 수 있습니다. 예를 들어 약간의 오해의 소지가 있습니다. , PHP에서 객체 지향 SplFileObject과 친구를 참조하십시오

$file = new SplFileObject("/path/to/file.txt"); 
$content = ''; 
foreach ($file as $line) 
    $content .= $line; 

이 더 전체 SPL, DOMDocument, DateTime, Intl, PDO 등 등 등. 좋아

+0

나는 핸들 매개 변수로 함수를 사용하는 것에 대한 의미를 설명하기 위해 예제로만 제공했습니다. –

+0

모든 것이 객체 지향이어야하는 것은 아닙니다. 여러분이 제공하는 핸들 예제는 종종 "객체"를 참조 할 수있는 절차 코드에 사용됩니다. 그러나 PHP는 5/5부터 많이 바뀌 었습니다.2 그리고 당신은 요즘 더 많은 객체 지향 인터페이스를 찾을 수 있습니다. 많은 라이브러리에는 [Tidy] (http://php.net/Tidy)와 같은 라이브러리와 [GMP] (http://php.net/GMP)와 같은 라이브러리가 있습니다. – hakre

+0

객체 지향은 함수를 첫 번째 매개 변수로 자동으로 객체를 전달하고 'this'를 호출하는 래퍼입니다. –

1

, 나는 이것 전문가는 오전 없지만, 어쨌든 추측 내 $ 0.02를 제공하도록하겠습니다 :

PHP, 웹 개발 일반적으로, 비교적 새로운 패러다임이다. C#은 40 년 동안의 작업을 기반으로합니다. PHP는 1995 년에 시작되었습니다.

PHP는 완전히 OO 일 수 있지만 웹 서버 프로그래밍은 자연스럽게 절차적인 환경입니다 - 서버가 HTTP 요청을 수신하고 일부 처리를 거쳐 응답합니다. 당신은 이것을 추상화 할 수는 있지만 항상 좋은 생각입니까?

웹 서버 환경의 많은 작업에는 OO가 실제로 필요하지 않습니다. 큰 프로젝트에서는 좋지만 수천 개의 사이트가 몇 개의 문자열 처리 기능을 사용하고()를 포함합니까? 어쩌면 메일()?

PHP는 고급 수학과는 대조적으로 문자열 처리에 중점을두고 경량 서버에서 실행되도록 속도를 높이기 위해 만들어졌습니다. 나를 인용하지 마십시오. 그러나 기본 클래스를 엄격하게 OO로 수행하면 성능 오버 헤드가 발생할 수 있습니다.

어쨌든, 나는 전문가가 아니지만 그것에 대한 내 생각의 종류 :) 적어도 생각을위한 음식.

+2

이것은 "PHP의 내장 라이브러리가 객체 지향이어야합니까?"라는 질문에 대답하는 것 같습니다. "왜 PHP의 내장 라이브러리가 객체 지향이 아닌가?" –

+0

글쎄, PHP가 디자인에 의해 객체 지향적이지 않다는 것을 합리적으로 추측 할 수 있다면, 그들은 거의 같은 질문입니다. 최종 결정을 내릴 수있는 유일한 방법은 젠드에게 PHP를 어떻게 만드는지에 대한 추측을 제공하는 것입니다. – siliconrockstar

관련 문제