[php] PHP의 숨겨진 기능? [닫은]

나는 이것이 요점을 묻는 질문처럼 들리지만 내가 어디에서 왔는지 설명해 줄 것입니다.

대학 밖에서 PHP 상점에 취직했습니다. 나는 1 년 반 동안 일했고 프로그래밍에 관해 배울 수있는 모든 것을 배웠다고 생각했습니다.

그런 다음 모든 작업이 C #으로 이루어진 규모가 큰 회사에서 한 사람의 내부 개발 상점으로 일했습니다. 그 입장에 대한 저의 헌신으로 저는 수많은 블로그와 책을 읽기 시작했고 모든 것을 알고 있다고 생각하는 것이 얼마나 잘못되었는지 빨리 깨달았습니다. 나는 단위 테스트, 의존성 주입 및 데코레이터 패턴, 느슨한 결합의 디자인 원리, 상속 토론에 대한 구성 등에 대해 배웠습니다. 여전히 많이 흡수하고 있습니다. 내 프로그래밍 스타일이 작년에 완전히 바뀌 었다는 것은 말할 필요도 없습니다.

이제 친구의 시작을 위해 코딩을하는 PHP 프로젝트를 선택하고 C #의 프로그래밍과는 달리 완전히 제약을 느낍니다. 클래스 범위의 모든 변수는 ‘$ this->’을 추가하여 참조해야한다는 사실을 정말로 귀찮게합니다. 내가 시도한 IDE 중 어느 것도 매우 지능적이지 않으며 SimpleTest 단위 테스트 방법은 단어 ‘test’로 시작해야한다는 것을 짜증나게합니다. 동적 타이핑으로 메소드가 기대하는 매개 변수 유형을 암시 적으로 지정하지 못하게하고 메소드 오버로드를 수행하기 위해 switch 문을 작성해야한다는 사실에 미치게됩니다. 중첩 된 네임 스페이스를 가질 수 없으며 :: 연산자를 사용하여 기본 클래스의 생성자를 호출해야한다는 것을 참을 수 없습니다.

이제 PHP vs C # 토론을 시작할 의도가 없습니다. 오히려 내가 말하려는 것은 모르거나 알지 못하지만 아직 제대로 사용하지 못하는 PHP 기능이 있다는 것입니다. C # 유니버스에 설정되어 있고 유리 그릇 외부를 보는 데 문제가 있습니다.

PHP에서 가장 좋아하는 기능은 무엇입니까? .Net 언어로 할 수 없거나 어렵게 할 수있는 일은 무엇입니까?



답변

문서 . 문서 내 투표를 가져옵니다. 프로그래밍 언어에 대한보다 철저한 온라인 문서를 만나지 못했습니다. 다른 모든 웹 사이트와 매뉴얼 페이지에서 함께 만들어야합니다.


답변

배열 . 이 질문에 대한 답변에서 판단하면 사람들이 PHP의 배열이 얼마나 쉽고 유용한 지 완전히 이해하지 못한다고 생각합니다. PHP 배열은 동시에 목록, 맵, 스택 및 일반 데이터 구조의 역할을합니다. 배열은 언어 코어로 구현되며 모든 곳에서 사용되어 CPU 캐시 위치가 양호합니다. Perl과 Python은 목록과 맵에 별도의 언어 구성을 사용하여 더 많은 복사와 혼동되는 변환을 만듭니다.


답변

스트림 핸들러를 사용하면 내가 알고있는 한 대부분의 다른 언어에서는 수행하기 어려운 논리를 사용하여 “FileSystem”을 확장 할 수 있습니다.

예를 들어 MS-Excel 스트림 처리기 를 사용하면 다음과 같은 방법으로 MS Excel 파일을 만들 수 있습니다.

$fp = fopen("xlsfile://tmp/test.xls", "wb");
if (!is_resource($fp)) {
    die("Cannot open excel file");
}

$data= array(
    array("Name" => "Bob Loblaw", "Age" => 50),
    array("Name" => "Popo Jijo", "Age" => 75),
    array("Name" => "Tiny Tim", "Age" => 90)
);

fwrite($fp, serialize($data));
fclose($fp);


답변

매직 메소드 는 존재하지 않는 메소드를 호출하거나 존재하지 않는 특성을 지정하거나 읽을 때마다 호출되는 대체 메소드입니다.

interface AllMagicMethods {
    // accessing undefined or invisible (e.g. private) properties
    public function __get($fieldName);
    public function __set($fieldName, $value);
    public function __isset($fieldName);
    public function __unset($fieldName);

    // calling undefined or invisible (e.g. private) methods
    public function __call($funcName, $args);
    public static function __callStatic($funcName, $args); // as of PHP 5.3

    // on serialize() / unserialize()
    public function __sleep();
    public function __wakeup();

    // conversion to string (e.g. with (string) $obj, echo $obj, strlen($obj), ...)
    public function __toString();

    // calling the object like a function (e.g. $obj($arg, $arg2))
    public function __invoke($arguments, $...);

    // called on var_export()
    public static function __set_state($array);
}

여기서 C ++ 개발자는 PHP가 일부 연산자 (예 : ()또는)를 오버로드 할 수 있음을 알 수 있습니다 (string). 실제로 PHP는 []연산자 ( ArrayAccess ), foreach언어 구성 ( IteratorIteratorAggregate ) 및 count함수 ( Countable ) 와 같은 훨씬 더 많은 과부하를 허용 합니다.


답변

표준 클래스 깔끔한 컨테이너입니다. 나는 최근에 그것에 대해서만 배웠습니다.

배열을 사용하여 서버 속성을 보유하는 대신

$person = array();
$person['name'] = 'bob';
$person['age'] = 5;

당신은 표준 클래스를 사용할 수 있습니다

$person = new stdClass();
$person->name = 'bob';
$person->age = 5;

이것은 문자열에서 이러한 변수에 액세스 할 때 특히 유용합니다

$string = $person['name'] . ' is ' . $person['age'] . ' years old.';
// vs
$string = "$person->name is $person->age years old.";


답변

포함 파일 에는 변수에 할당 할 수 있는 반환 값 이있을 수 있습니다.

// config.php
return array(
    'db' => array(
        'host' => 'example.org',
        'user' => 'usr',
        // ...
    ),
    // ...
);

// index.php
$config = include 'config.php';
echo $config['db']['host']; // example.org


답변

or연산자가 =이를 수행하는 것보다 우선 순위가 낮다 는 사실을 활용할 수 있습니다 .

$page = (int) @$_GET['page']
  or $page = 1;

첫 번째 대입 값이으로 평가 true되면 두 번째 대입은 무시됩니다. 다른 예시:

$record = get_record($id)
  or throw new Exception("...");