[Powered by Google Translate] [제 8 - 더 편안한] [롭 보덴 - 하버드 대학교 (Harvard University)] [이 CS50입니다. - CS50.TV] 이 주 섹션 노트는 매우 짧은 될거야 난 그냥 계속 얘기 할거야, 니 얘들 아, 질문을 계속하실 작정 이오 우리는 가능한 한 많은 시간을 채우기 위해 노력 할게요. 많은 사람들이 pset이 반드시 어렵지 않습니다 생각하지만, 매우 긴입니다. pset 사양 자체가 시간이 읽을 소요됩니다. 우리는 당신에게 당신이 가능하게 사용해야 할 수있는 SQL을 많이 제공합니다. 우리는 많은 거쳐 때문에 너무 나쁜해서는 안됩니다. 사람이 시작 또는 완료? 이게 마지막 pset입니다. 오, 맙소사. 보통 일정 변경 일들이,이 후 자바 스크립트 하나이지만, 일주 짧은 모든 수 있습니다, 우리는 더 이상 자바 스크립트 pset가 없습니다. 그게 자바 스크립트 시험에 나타납니다 것입니다 여부에 영향을 미칩니다 어떻게하는지 몰라 또는 1 퀴즈. 당신이 자바 스크립트에 대해 높은 수준의 물건을 알고 있어야 것처럼, 뭔가 될 것입니다 상상 하지만 우리가 당신에게 직접 자바 스크립트 코드를 제공 할 의심 당신은에 pset가 없었 때문입니다. 하지만 그건 다음 주 퀴즈 검토 걸 수 있습니다. 질문 섹션을 참조하십시오. 이 물건의 많은 다소 저조한 worded이지만, 우리는 이유를 설명합니다. C와 달리, PHP는 "동적 타이핑"언어입니다. 이 란 뜻이 뭔가 물어? 음, 그 문자, 무개차, INT, 기타 모든 키워드에 작별 인사 당신은 사용할 필요가 변수와 C. 함수를 선언 할 때 PHP에서 변수의 유형이 현재 쥐고있는 값에 의해 결정됩니다. 우리는 dynamic.php라는 파일에이 코드를 입력 전에는 PHP는 동적으로 입력됩니다. 그건 사실입니다. 내 말은, 그 우리가 INT, 숯불, 떠 작별 인사하는 것을 의미한다는 사실에 동의 및 기타 키워드입니다. 동적으로 입력과 대안 사이의 정확한 차이, 정적으로 입력되는 그는 동적으로 입력하여 유형 검사 및 물건들 , 런타임에 발생 정적으로 입력 반면,이 컴파일 시간에 발생합니다. 일반적으로 정적 단어는 컴파일 시간을 의미 보인다. 나는에 대한 다른 용도가 생각하지만 정적 변수를 선언 C에서 의 저장 용량은 컴파일시에 할당됩니다. 여기 동적으로 입력 단을 의미합니다 - C에서, 당신이 그것을 컴파일 할 때 문자열과 정수를 추가하려고하면 그것은 당신이 정수와 포인터를 추가 할 수 없습니다 말 것 때문에 불평거야. 단지 유효한 작업이 아닙니다. 우리가 두 번째로에 도착한다고 다른 것입니다. 그러나 검사의 종류,이 컴파일 시간에 불만 있다는 사실, 정적 유형 검사입니다. 당신은 문자, 무개차, int는 말을 할 필요가 없습니다 언어, 그 모든 일이 있습니다 하지만 언어는, 그것이 있어야 할 어떤 종류의 일의 맥락에서 알 수 하지만 여전히 정적으로 입력있어. 당신은 51, OCaml을한다면, 당신은 이러한 유형 중 하나를 사용 할 필요가 없습니다 하지만 여전히 컴파일 시간에 당신이 정수와 문자열을 혼합하기 때문에이 작업을 수행 할 수 없습니다 말할 것입니다. 동적 입력은 언젠가는 실행 시간 동안 당신이 불만을 얻을 수 있다는 것을 의미합니다. 당신은 또한 일반적으로 이전에 자바를 사용한 적이 있다면, 거의 모든 C 형 언어 정적 때문에 C, C + +, 자바, 그 모두가 일반적으로 정적으로 입력되며, 입력 할 예정이다. 자바에서 당신이 뭔가를 컴파일하고 말 할 때 문자열 S는 문자열이 아닌 뭔가 새로운 것을 동일 그게 그 유형이 방금 일치하지 않기 때문에 불평거야. 그래서 컴파일 시간에 불평을거야. 당신이 뭔가를 캐스팅하려한다면 그것은 또한 물건이 좋아하는 동적 시간이 현재 유형보다 구체적인입니다 유형, 그렇게 캐스트가 성공 것입니다 여부를 확인 컴파일 시간에 할 수있는 건 아무것도 없습니다. 자바는 또한 확인 동적 유형이 그 코드의 라인으로 데려다 줄 실제로 실행을하면, 그것은, 캐스트를 할거야 그 팔로는 처음에 유효하면 확인 그리고이 아니 었어요 경우, 당신이 잘못된 형식을 가지고 불평거야. 동적 유형 검사. dynamic.php라는 파일에 입력. Dynamic.php. 난 그 형식을 압축을 풉니됩니다. 우리는 우리가 정수 7을 설정 변수가 그런 다음 그걸 % s을 (를) 인쇄 할거야 - 아, 우리는 그것의 유형을 인쇄하고 있으므로 gettype는 변수의 유형을 반환하는 것이다. 우리는 계속해서 유형을 인쇄하고 있습니다. 우리는 php.dynamic.php. 이 부분에 대해서는 정수의 논리 값으로 문자열에 그 변경 사항을 우리가 통과. C에 부울 데이터 형식이없는, 아무 문자열 데이터 형식이 없습니다. 이 숯불 *군요 부울는 정수 나 문자 나 다른 누군가가 되길 경향이있다. PHP에서 이러한 유형의 존재, 그리고 그 C 이상의 PHP의 가장 큰 장점 중 하나 - 문자열 작업은 그들은 단지 동작 C.보다 PHP의 무한 쉽게 것을. 그래서 우리는 돌아와. 우리는 dynamic.php를 실행. 이 dynamic.php에 PHP 코드를 실행하는 PHP라는 PHP 인터프리터를, 알려줍니다. 이 파일에 오류가있는 경우, 통역사을 말해 줄 것이다 통역,이 PHP와 C 사이의 또 다른 큰 차이입니다 C에서 당신은 무언가를 컴파일 한 다음 해당 컴파일 파일을 실행해야합니다. PHP에서 당신은 아무것도 컴파일하지 마십시오. 따라서 PHP 인터프리터는 기본적으로 단지 선으로이 줄을 읽을 수 있습니다. 이 VAR은 = 7 다음이 그것이 printf 등 친 후 VAR에 도달 printf 후 조회 공격합니다. 이 그러길 컴파일 비트이며, 그 결과를 캐시에 저장 이 스크립트를 실행하는 경우 때문에 나중에는 일부를 수행 할 수 하지만 기본적으로이 일을 행 정렬 선입니다. 그래서 우리가 C에 있지 최적화 많은 의미 컴파일처럼,이 컴파일러가 당신을 위해 많은 트릭을 할 수 있습니다 만 일반적입니다. 그것은 사용하지 않는 변수를 꺼낼 수는, 일 이러한 종류의 모든 작업을 수행 할 수 그것은 꼬리 재귀 작업을 수행 할 수 있습니다. PHP에서 그 이점을 얻을 수 없어 그냥 선으로 선으로 줄을 실행부터 시작하기 때문에하면, 와 정말 쉽게 이런 일을 인식하지 못합니다 가 1 큰 컴파일 것은 이상 패스하고 실행은 아니니까, 이 선으로 만 선입니다. 그래서 결국 통역사입니다. 우리의 동적 타이핑로 돌아 가기 : 정말 멋진, 응? 당신은 확실히 C에서 해당 작업을 수행 할 수 없습니다! 다음과 같은 값이 각각의 유형을 알아낼 수 있다면 참조하십시오. 참고이를 참조하십시오. 3.50 그럼. 당신은 할 거에요 어떤 종류의 생각은 어때? 여기에 우리가 가지고있는 유형입니다. 우리는 bools, 정수, 부동 점, 문자열, 배열, 객체 있습니다 그리고 모호 어떤 종류의 자원된다. 나는 예를 들어 이곳에있는 것 같아. 그런 다음 NULL이 있어요. NULL은 특별한 유형입니다. NULL 방금 주소 0에 대한 포인터입니다 C는 달리, PHP에서 NULL은 해당 유형의 경우에만 유효 것은 NULL이 자신의 유형입니다. 이 훨씬 더 유용한 오류 검사를위한 것입니다. 귀하가 NULL 반환하는 경우이 문제를 가지고 C에서, 그 말은 당신이 NULL 포인터를 반환하거나 오류를 의미하는 NULL을 사용하는 의미 아님 우리가 시점에서 가지고있는 그 혼란의 모든. 여기 NULL을 반환하면 일반적으로 오류를 의미합니다. 많은 것들이 또한 오류에 대한 허위 반환합니다. 그러나 중요한 점은 NULL 유형, NULL 타입의 유일한 NULL입니다. 당신이 익명 함수를 정의 할 수 있습니다처럼 그런 다음 콜백입니다. 당신은 함수 이름을 부여 할 필요가 없습니다,하지만 여기에 처리 할 필요가 없습니다. 그들은 우리가 알고 기대하는 종류를 살펴보면, 당신은 3.50의 종류는 어떻게 생각하세요? >> [학생] 플로트. 그래. 그래서 여기,이 유형은 어떻게 생각하세요? >> [학생] 배열입니다. 그래. 첫 번째는 부동이었고, 두 번째는 배열입니다. 이 배열은 C 배열처럼 아니라는 것을 발견 당신이 인덱스를 가지고있는 0 어떤 값을 가지고, 색인 1 어떤 값이 있습니다. 다음은 인덱스는 A, B 및 C이며 값은 1, 2, 3입니다. PHP에서 연관 배열 불과 정기적으로 배열 사이에 차이점이 없습니다 당신은 C.에서 생각하는 것처럼 가 이번 있으며, 후드 아래 일반 배열은 연관 배열이다 어디에서 어떤 값을 어떤 값 0지도 같은 방법은지도를 제공합니다. 이러한 이유로, PHP 정말 빠른 코드 / 벤치마킹 물건을 꽤 심하게 할 수 있습니다 C에서 당신이 배열을 사용할 때부터 당신은 회원에 접속하면 일정 시간이 것을 알고있다. PHP는 회원을 액세스에서 얼마나 많은 시간을 알고 누구야? 올바르게 해시하면 아마도 상수입니다. 누가 정말 후드 아래에 무슨 짓을 아는 사람? 당신은 정말 그렇게 처리 할지를 확인하기 위해 구현 살펴해야합니다. 그래서 fopen. 난 그냥 PHP 매뉴얼 fopen의 반환 형식을 살펴 보자 여기 생각합니다. 우리는 당신이 PHP 매뉴얼에 거의 모든 기능을 찾아 볼 수 있습니다 여기를 클릭하십시오 그리고이 PHP의 man 페이지의 일종입니다. 반환 유형은 자원이 될 것입니다. 내가 고개를 왜 우리가 정말 리소스를 정의하지 않았기 때문에 즉,입니다. 자원의 아이디어는, C에서 당신은의 종류 FILE * 또는 무엇이든을받습니다; PHP에서 리소스 파일에 * 있습니다. 당신이 읽는 될 것이야, 당신이에 서면 할 것거야. 그것은 일반적으로 외부에요, 당신이에서 물건을 당겨하고 먹일 수있어 자원입니다. 그리고 마지막으로, NULL의 유형 무엇입니까? >> [학생] NULL. 그래. 따라서 NULL 인 유일한 NULL입니다. NULL은 NULL입니다. PHP의 타입 시스템 (더 나은 또는 더 나쁜 경우) 중 하나 기능은 형식을 저글링하는 기능입니다. 당신은 다른 유형의 값을 결합하여 PHP 코드 한 줄을 작성하면, PHP는 합리적인 일을하려고합니다. PHP 코드의 다음 줄의 각을 사용해보세요. 무엇을 인쇄거야? 당신이 기대했던 이냐? 왜, 왜 안돼? PHP에 대한이 사실은 우리가 약하게 입력 된 부릅니다를 만드는 것입니다. 약하게 입력하고 강력하게 형식화 된, 해당 조건에 대해 서로 다른 용도가있어, 하지만 대부분의 사람들은 이런 걸 의미 약하게 입력하고 강력하게 입력을 사용하여 곳 ( "1"+ 2), 그 작동합니다. C에서 그 동작하지 않을 것이다. 당신이 작동하지 상상할 수 있습니다. 많은 사람들이 동적 입력과 약한 입력 및 정적 타이핑 및 강력한 입력을 섞는다. 파이썬은 동적으로 입력있어 언어의 또 다른 예입니다. 당신은 변수의 유형을 주변에 던질 수 있으며 런타임에 결정하는거야 오류 checkings. 파이썬에서는이 실행하고 ( "1"+ 2)가 표시됩니다 거예요; 당신이 문자열과 정수를 추가 할 수 없다는 때문이 실패합니다. 마찬가지로 동적으로 입력 된 PHP에서는이 실패하지 않습니다. 약 타이핑은 유형과 일을 수행한다는 사실과 연관이 정말 반드시 이치에 맞지 않는. 따라서 ( "1"+ 2), I는 문자열 12 것, 내가 문자열을 세 상상 할 수있는 상상할 수, 나는 정수 3 상상 할 수 있습니다. 그것은 반드시 잘 정의되지 않은, 우리는 아마 여기 만나러가는 중이 야 우리가 인쇄 할 때 ( "1"+ 2), 아마도 다른 끝나게거야 인쇄 이상 (1 + "2"). 그리고이 악화에 대한 제 생각이 될 경향이있다. 여기이를 시도 할 수 있습니다. PHP에 대한 또 다른 작은 속임수는 실제로 파일을 작성 할 필요가 없습니다 것입니다. 그것은이 명령 모드를 실행 한 않습니다. PHP-R 그래서, 우리는 여기에 명령에 던져 수 있습니다 : "인쇄 ('1 '+ 2);"나는 새 줄을 던질거야. 이 3 인쇄. 이 3 인쇄하고 정수 3 다있는 것 같습니다. 그래서 지금의이 다른 식으로 해보자 : "인쇄 (1 + '2 '); 우리는 3를, 또한 정수 3 거에요? 솔직히 아무 생각이 없습니다. 일관성이입니다 것 같습니다. 이 문자열 12 이런 건가되는 가능성은이 결코 때문에 너무 PHP, 자바 스크립트와 달리 자바, 연결에 대한 별도의 연산자가 있습니다. PHP의 연결은 점입니다. 인쇄 그래서 (1 '2 '는.); 우리에게 12 줄 예정이다. 이 사람들은으로 str + = 같은 일을하려고 곳 혼란을 초래할 경향이 그들이 문자열의 끝에 추가하려면, 그 실패는 게 다른 것. 당신은으로 str 할 필요. = 따라서 PHP의 연결은 점입니다 잊지 마세요. 시도 할 수있는 다른 일들 ( "CS"+ 50) 인쇄; 나는 CS50의 결과로이 희망이 없다고 얘기 했잖아요 연결은 +하지 않습니다 때문입니다. 당신은이 끝나게 것입니다 어떻게 생각하십니까? 솔직히 전혀 생각이 없습니다. 그냥 50 것 같습니다. 이 문자열을보고, 우리는 123CS 둔 건지 내기 - 그것은 첫 번째 문자열을보고, 그곳에서 정수 또는에서 번호를 읽을하려고합니다. 이 경우는 123CS 본다. "정수로 이해가되지 않는 그, 그럼 난 그냥 123을 생각 할거야." 123 그래서 + 50 173 될 것입니다. 그리고 여기에는 정수로이 페이지를 읽고 시작합니다. 그것은 아무 것도하지 않는, 그냥 그 영으로 취급하므로. 0 그래서 + 50은 50가 될 것입니다. 제가 있으리라 믿고있어이 비슷한 일을 할거야. 나는 99 생각하고 있어요. 네, 먼저 데려 갈 있기 때문에 - 99 그럼. 이 C라면 여기 (10 / 7), 그게 무슨 반환까요? [학생] 1. 7분의 10 2 정수를 나누어 있기 때문에 >> 네, 1 것입니다. 정수로 나눈 정수는 정수를 반환 예정이다. 그것은 것 1 포인트 무엇이든을 반환 할 수 없습니다, 그래서 그냥 1을 반환하는거야. 여기 (10 / 7) 인쇄, 실제로 것으로 해석하는거야. 그리고 이것은 당신이 실제로 그렇게 정수 반올림 물건을 원하는 경우 당신은 인쇄를 (층 (10 / 7)) 할 필요가; C에서는, 당신은 정기적으로 정수 절단에 의존 할 수있는 것 이상 해요 하지만 PHP에서 당신은 자동으로 부동으로 돌려 할 수 없기 때문에. 그리고 (7 + 사실), 당신은 할 거에요 어떻게 생각하세요? 가 1로 진정한 해석하는거야 경우 8 추측거야. 그 8 것 같은데. 우리는 당신이 절대적으로하지 않아야 지난 10 분 한 것도 그럼. 당신은이 작업을 수행 코드를 볼 수 있습니다. 그것은이처럼 간단 할 필요가 없습니다. 당신은 2 개의 변수를 가질 수 있으며, 한 변수는 문자열로 발생 와 다른 변수는 정수로 발생하고, 다음 같이이 변수를 추가 할 수 있습니다. PHP는 동적으로 입력되어 당신을 위해 어떤 종류의 검사를하지 않습니다 때문에 그리고 그것은 약하게 입력있어 않았고, 그냥 자동으로 함께 먹일 때문에 그리고 모든 것이 작동합니다, 그것은, 심지어이 변수는 현재 문자열이어야합니다 알고 어렵습니다 그래서 정수입니다,이 변수에 추가해야합니다. 변수가 문자열 인 경우 가장 좋은 방법은, 영원히 문자열로 보관하십시오. 변수가 정수이면 영원히 정수로 유지. 당신은 정수와 문자열을 처리하려면 당신은 varsint을 사용할 수 있습니다 - 그건 자바 스크립트입니다. Intval. 이 모든 시간을. PHP와 자바 스크립트가 난 모든 걸 망쳐 섞는다. 따라서 intval은 변수의 정수 값을 반환 예정이다. 우리가 "인쇄 (intval ('123 '))에 합격 할 경우, 당신은 123를 얻을. Intval 자체는 독점적 정수라고 우리에있는 확인란의 선택을하지 않을 수 있습니다. PHP 매뉴얼, 너무 많은 기능을 사용할 수 있습니다 그래서 여기가 내가 할 때 사용하는 첫번째 i​​s_numeric 생각합니다. 나는 true를 반환 것 같은데요. 우리가 === 넘어 가야 다른 일이야. 따라서 is_numeric ('123df '), 그와 같은 is_numeric 생각 없습니다. C에서는 모든 문자를 통해 반복해야 각 문자가 숫자이든 뭐든간에 있는지 확인합니다. 여기 is_numeric, 우리를 위해 일을 할거야 그리고 거짓 돌아오고있는중인 데요. 그래서 그렇게 인쇄 때, 여기 내가보고 비교하고 있잖아, 아무것도 인쇄되지 당신은 거짓으로 무슨 일 있었어? 그리고 지금은 1 인쇄있어. 분명히 그 대신에 진실이 진실 인쇄 true로 1 인쇄합니다. 나는 print_r을 궁금. 아니요, 아직 1 않습니다. ===으로 돌아 간다, == 여전히 존재 그리고 토미에게 말해 준다면 그는 말 그대로 == 완벽하게 괜찮습니다. 나는 ==이 끔찍한이고 ==를 사용하지 않는다 이렇게 말할거야. 차이점은 == 사물을 비교하는 것입니다 은 같은 타입이 아니야 경우에도 사실이 될 수있는, === 물건을 비교하고 먼저 수표는 동일한 유형 있지? 반면, 예. 자, 이제 나는 그들이 실제로 동일 할 비교하면 볼 거예요. 당신은 10 살 이상한 일들이 동일 해 - 그것이 알아 보자. 따라서 ('10 '== '1 E1'); 이 true를 반환합니다. 사람이 true를 반환 이유를 추측이 있습니까? 단지 그것에 대해하지 않습니다. 아마이 힌트입니다. 하지만 F에 그렇게 변경하는 경우 - 제길! 나는 따옴표를 계속 사용. 나는 따옴표에 넣고 한 때문에 큰 따옴표 내게 소리 치는 거예요 때문입니다. 그래서 여기에 이​​중 따옴표를 회피 할 수 있지만, 작은 따옴표는 쉽게합니다. 따라서 ('10 '== '1 F1'); 사실이 인쇄되지 않습니다. ('10 '== '1 E1'); 사실 인쇄합니다. [학생]은 진수인가? >>이 마법은 아니지만, 그것이 거라고 가까이 - 1e1, 과학적 표기법. 그것은 1로 1e1 인식 * 10 ^ 1 뭐든간에. 사람들은 동일한 정수입니다. 우리가 === 할 경우 그것을 거짓거야. 우리가 할 경우 실제로 아무 생각이 없습니다 == 무엇 (10 '10abc ')에 대해,? 괜찮아요. 그래서 사실입니다. 있으며, 20 것, 그래서 당신이 (10 + '10abc '을)했던 때처럼 여기에 (10 == '10abc '); 사실입니다. 더 나쁜 것은이 같은 일 (허위 == NULL)입니다, 사실입니다 또는 (거짓 == 0), 사실 (거짓 == []); 의 이상한 경우가 있습니다 - 그게 이상한 사례 중 하나입니다. 주의는 (거짓 == []); 사실입니다. ('0 '== 거짓); 사실입니다. ('0 '== []); false입니다. 따라서 ==가 전이 어떠한 방식으로도 있습니다. , a는 b와 동일 할 수 있고는 C와 동일 할 수 하지만 B는 C와 일치하지 않을 수 있습니다. 저 한테는 실패작이고, 당신은 항상 ===를 사용하는 것이 좋습니다. [학생] 우리는 할 수 있어요! ==뿐만 아니라? >> [보덴] 예. 이에 상응하는 것! = 및! ==. 이것은 실제로 pset 사양에 데려갑니다 곳 함수 반환 많은 - PHP 매뉴얼이에 대한 좋은 것입니다. 그것은 "오류가있을 경우이 false를 반환합니다."큰 빨간색 상자에 넣어 그러나 반환 0 돌아가 완벽하게 합리적인 것입니다. 정수를 반환 할 것으로 예상되는 기능에 대해 생각해보십시오. 자,이 기능은 파일이나 뭔가를 줄 수를 계산 거라 더군. 정상적인 상황에서는, 당신은이 기능이에게 파일을 전달 그리고 라인의 수를 나타냅니다 정수를 반환하는거야. 파일이 단지 비어있는 경우 그럼 0 완벽하게 합리적인 숫자입니다. 당신은 그것을 잘못된 파일을 통과하고 있다면이 함수는 FALSE를 반환하려면 어떻게 발생 당신은 그것을 잘못된 파일을 통과하면? 방금 할 경우 ==이 잘못 파일 및 빈 파일 사이의 사건을 구별하지. 항상 ===를 사용합니다. 이 사람이 전부에요. PHP에서 배열 타입은 당신이 C.에에 사용하는 것과 다른 이 입력 배열의 것을봤을 때 실제로, 당신은 이미이 이상 발견했을 수 있습니다. 브라켓 구문은 PHP의 최신 버전입니다 PHP 5.4의 같은 새로운입니다. > 1, 'B'- -> 2이 전에 항상 ( ''배열을 작성했습니다. 그 배열의 생성자했습니다. 지금 PHP 결국, 단지 대괄호의 좋은 구문에 돌아왔다 이는 배열보다 훨씬 낫다. 그러나 PHP 5.4을 고려하면, 최신 버전입니다 당신은 심지어 PHP 5.3이없는 장소가 발생할 수 있습니다. PHP 5.3 우리가 어플라이언스에했던 일이있는 곳, 여름 동안 우리는이 문제를 우연히 만났어 하지만 우리는 모든 학년 도서를 배포하여 제출하고 모든 물질에있는 서버 PHP 5.4이었다. 이 사실을 모르는, 우리는 5.3에서 개발, 5.4에 적용 지금 우리 코드의 갑작스런 없음의 작동 5.3과 5.4 사이의 변화가 있었던 일 이거든 하위 호환되지 않습니다있는 우리는 가서 PHP 5.4이 작동하지 않는 우리 물건의 모든 문제를 해결해야합니다. 어플라이언스는 않기 때문에이 클래스의 경우, PHP 5.4 있습니다 그것은 대괄호를 사용하는 완벽하게 괜찮아요. 하지만 당신이 인터넷에 물건을 찾고 있다면, 당신은 배열의 물건 일종의을 찾고 있다면, 가능성이 가장 높은 당신은 날씬하고, 예쁘고, PHP 년부터 주변에 있었 그 이후 배열 생성자 구문에서 주술이 태어났다 와 대괄호 구문은 지난 몇 개월 동안 주변되었습니다 또는 때마다 5.4 주변왔​​다. 이 어떻게 색인입니다. 그냥 C에서와 마찬가지로 당신이 어떻게 $ 배열 [0], $ 배열 [1], $ 배열 [2], 같은 대괄호로 인덱스 겠어 색인을 생성하면 인덱스가 문자열되는 할 일이 경우 같은 방법으로합니다. 그럼 $ 배열 [ '']와 $ 배열 [ 'B']. $ 배열 [B]. 왜 잘못된 일일까요? 아마도 경고를 생성하지만 여전히 작동합니다. PHP는 그런 짓을하는 경향이있다. 단지, "나는이 경고거야 경향, 난 그냥 계속 올라갈거야 "하고 내가 할 수있는 모든 일을한다." 아마, 문자열이 번역합니다 하지만 과거 누군가의 어떤 시점에서 말했다 수 있습니다 'HELLO WORLD'로 B를 정의합니다. 이제 B는 상수와 $ 배열 될 수 [B]는 실제로 '안녕하세요'하고있을 것입니다. 나는이 시점에서 생각하거나, 적어도 우리 PHP 설정 당신이 배열에 색인을 생성하려고하고 키가 존재하지 않는 경우는 실패합니다. 나는 당신을 경고 할 생각하지 않아요. 아니면 그냥 경고를하지 않도록 적어도 당신이 그것을 설정할 수 있습니다, 그냥 똑바로 실패합니다. 당신은 실제로 이러한 인덱스가 있는지 확인하는 방법은 isset 수 있습니다. 그래서 isset ($ 배열 [ 'HELLO WORLD'])는 false를 반환합니다. isset ($ 배열 [ 'B']) TRUE를 반환합니다. 당신이 문법을 섞을 수 있습니다. 우리를 테스트 할 수 있습니다 - 어떻게이 배열은 끝나게 것 것은 확신합니다. 오, PHPWord가 필요합니다. 이렇게하면 키가 무엇 지정한 구문을 혼합하고 있습니다 그리고 당신은 그 열쇠가 무엇인지 지정하지 않습니다. 그래서 여기 3 자 값입니다. 당신은 명시 적으로는 키가 될 것입니다 어떤 말했다. 이제 당신은 키가 될 것입니다 어떻게 생각하십니까? [학생] 0. >> 나는 우리가 지정하지 않은 첫 번째 하나 있기 때문 0 같은데요. 우리는 실제로 이러한 경우 몇을 수행 할 수 있습니다. 그럼 print_r은 재귀 인쇄합니다. 그것은 전체 배열을 인쇄합니다. 어떤이 있다면 그것은 배열의 subarrays를 인쇄합니다. 따라서 print_r ($ 배열); php.test.php. 결국 그에게 0을 준 것 같은데. 이곳에 유의해야 할 뭔가가 실제로이지만, 우리는 두 번째에 연락 드리겠습니다. 하지만 제가이 색인에 하나를 만들기 위해 어떻게하면? PHP는 문자열 인덱스와 정수 인덱스를 구분하지 않습니다 그래서이 시점에서 난 그냥 인덱스 1을 정의와 나, 둘 다 $ 배열 [1]와 $ 배열 ['1 '] 할 수있는 와 같은 색인과 같은 열쇠가 될 것입니다. 이제 당신은 3이 될 것입니다 어떻게 생각하세요? >> [학생] 2. >> [보덴] 나​​ 2 일거야. 그래. 는 2입니다. 우리가이가 10 그랬다면,이 4 무엇입니까? 당신은 3 색인이 될 것입니다 어떻게 생각하십니까? 나는 11 생각하고 있어요. PHP는 않습니다 일들을 내 생각 엔 - 그리고 내가 전에 본 것 같은데 - 그냥이 지금까지 사용되는 가장 높은 숫자 인덱스가 무엇인지를 추적하고 있습니다. 이 3 문자열 인덱스를 할당 못할거야. 항상 숫자 인덱스 될 것입니다. 그럼 10에서 일어나는이 지금까지 할당되어있는 가장 높은 하나를 추적 그리고 3-11을 제공거야. 내가 전에 한 말, 그건이 배열을 인쇄하는 방법을 확인합니다. 그것은 키 4 키 11 키 D 키 열을 인쇄합니다. 또는 해보자 구 - 나는 0을 넣어 한적 없어요,하지만 인쇄 1, 2, 3, 4입니다. 내가 여기 전환한다면? 또는의 실제로 이러한 2로 전환 보자. 이제 2, 1, 3, 4를 인쇄합니다. PHP의 배열은 일반 해시 테이블처럼되지 않습니다. 이 해시 테이블의 시간의 99 % 쯤으로 생각 완벽하게 합리적입니다. 하지만 해시 테이블에 물건을 삽입 된 순서의 개념도가 없습니다. 그래서 당신은 당신의 해시 테이블에 삽입하는 즉시 거기에는 연결리스트가 없다고 및 연결 목록에서 판단 할 수 가정 어떤 먼저 삽입되었습니다. 하지만 여기 우리가 처음 2 삽입하고 2 먼저하는이 배열을 인쇄 때 그렇게 알고 있습니다. 단지 순서에 인쇄되지 않습니다. 가 사용하고있는 기술 자료 구조는 순서가있는 맵이다 그래서 값으로 키를 매핑하고 해당 키가 삽입 된 순서를 기억합니다. 기본적으로 그것은 실제로 짜증 일부 합병증이야 - 자, 당신은 배열 0, 1, 2, 3, 4, 5가 있다고 그리고 당신은 인덱스 2를 먹고 싶어. 그러는 중 한 가지 방법, 그게 어떻게 생겼는지 살펴 보자. 0, 2, 1, 3, 4. 설정 해제는 변수와 배열 인덱스를 모두 설정 해제이기도 해. 따라서 설정 해제 ($ 배열 [2]); 이제 어떻게이처럼 보이도록거야? 2 그냥 가버이기 때문에, 그 완벽하게 좋아요. 당신이 일이 실제로 배열처럼되고 싶으면 더 짜증나는입니다. 나는 임의의 숫자를 넣어드립니다. 지금 내 인덱스를 확인합니다. 1 - 나는 0에서 길이 어디로 가는지 그냥 C 배열처럼되고 싶어요 와 같은 그 위에 반복 할 수 있습니다. 그러나 최대한 빨리 색인 3 뭔지 두 번째 색인을 설정 해제로 현재 인덱스 2가되지 않습니다. 대신에 그냥 인덱스를 제거하고 지금은 0, 1, 3, 4를 이동합니다. 이 완벽하게 합리적이다. 이건 그냥 짜증과 배열 스플 라이스 같은 일을해야합니다. 그래. [학생]이 (가) 당신이 루프에 대한이 있다면 어떻게 될까요 그리고 당신은 모든 요소를​​ 통해 가고 싶어? 이 2 쳤을 때 어느 얻을까요? 배열을 통해 반복. 당신이 할 수있는 2 가지 방법이 있습니다. 당신은 루프에 대한 정기적 인을 사용할 수 있습니다. 이것은 PHP의 또 다른 intricacy입니다. 대부분의 언어는, 내가 말하는 것, 길이 또는 렌 어떤 종류의이 배열의 길이를 나타냅니다. PHP에서는이 수 있습니다. 그럼 카운트 ($ 배열) $ I + +) 자, 그냥 인쇄 ($ 배열 [$ I]); 공지 사항 : 정의되지 않은 오프셋 : 2. 단지 실패 할거야. 이 대부분의 경우이 같은 배열을 통해 반복 할 필요가 없습니다, 그 이유입니다. 이 과장 될 수 있지만,이 같은 배열을 통해 반복 할 필요가 없습니다 PHP는 foreach ($ 배열로 $ 항목)는 foreach 구문을 제공합니다 때문입니다. 이제 우리는 ($ 항목) 인쇄하는 경우, - 최후의 두 번째에서 토론 - 완벽하게 잘 작동합니다. foreach가 작동하는지 방법은 첫 번째 인수가 끝난 반복하고있는 배열입니다. 그리고 루프의 각 패스를 통해 두 번째 인수, 항목, 이 배열의 다음 이야기는 걸릴 겁니다. 따라서 배열 순서가 기억나요. 루프를 통해 처음 항목은 123이 될 것입니다 다음 12 수하는 것은 다음 13 수하는 것은 다음 23 수 건 그건 213입니다. 당신은 foreach 같은 것을 할 때 상황이 정말 이상한. 이 작업을 수행하지 않는다 때문에 어떻게되는지 보자. 만약 우리가 설정 해제 ($ 배열 [1]); 그 가능성이 예상되었다. 이 배열을 통해 반복하고 각 시간 당신은 첫 번째 인덱스를 unset하고 있습니다. 따라서 인덱스 0에 대해 제일 먼저, 항목 값을 0에 소요 때문에 123거야. 그러나 내부의 루프에 대한 우리 인스 인덱스 1, 수 있도록 12가 사라 의미합니다. 따라서 인쇄 할 수 있습니다. PHP_EOL. PHP_EOL은 줄 바꿈이지만, 기술적으로 더 휴대용입니다 Windows에서 뉴 라인은 Mac과 UNIX에서 뉴 라인 다릅니다 때문입니다. Windows에서 줄 바꿈 \ 연구 \ n을, 다른 곳 반면, 그냥 \ N 경향이있다. 이 시스템의 줄 바꿈이 무엇이든 사용하도록 PHP_EOL가 설정됩니다. 수 있도록 인쇄 할 수 있습니다. 끝에서 ($ 배열) print_r하지 말자. 나는 행동을 할 것이라고 아무 생각도 없습니다. 우리가 배열에서에 도착하기 전에 우리가 12 설정 해제하더라도 항목은 아직 값이 12 일이 소요됩니다. 이것 만 알아 두세요하지만, foreach는 배열의 복사본을 만드는 것 같습니다하지 마십시오 다음 항목이 해당 복사본의 모든 값에 걸립니다. 당신은 루프의 내부 배열을 수정 않더라도 그것은 상관하지 않습니다. 항목은 원본 값을 취할 것입니다. 의가를 unset 해보자. 이게 $ 배열 [1] 인 경우 = "안녕하세요"; 우리는 배열에 "안녕하세요"를 넣어에도 불구하고, 항목은 값에 소요하지 마십시오. 루프를 foreach 다른 문법이 어디서 화살표로 구분하여 두 변수를 넣어. 첫 번째 변수는 그 값의 열쇠가 될 것입니다 그리고이 두 번째 변수는 똑같은 항목이 될 것입니다. > 1 - 여긴 재미,하지만 우리가 'A'의 오리지널 케이스에 돌아 가면됩니다 'B'-> 1, 우리가 항목으로 각 배열에 대해 반복하는 경우 여기 항목은 매번 하나가 될 것입니다. 그러나 우리는 또한 항목과 관련된 키를 알고 싶다면 > $ 아이템 - 다음에 우리가 달러 키를 않습니다. . ':'이제 우리는 인쇄 ($ 키를 수행 할 수 있습니다. 이제 이상 반복하고 각 키와 관련된 값을 출력있어. 우리는 foreach 루프에서 할 수있는 추가 문제는이 구문을 볼 수 있습니다. 변수 이름 앞에 앰퍼샌드는 PHP는 참조를 어떻게 경향이 있습니다. 참조는 포인터와 매우 유사합니다, 어디 당신은 포인터를하지 않기 때문에 직접 메모리를 처리하지 마십시오. 그러나 당신은 한 변수가 다른 변수와 같은 이야기로 의미 참조를 가지고 있습니다. 여기의 내부 항목 $ 한번 해보자 구. 가 1, 10로 넘어가 보자. 항목 $를 보자 + +;는 아직도 PHP에 존재합니다. 당신은 아직도 + + 작업을 수행 할 수 있습니다. php.test.php. 내가 인쇄 할 수 있습니다. print_r ($ 배열); 우리는 2, 11 인쇄 할 수 있습니다. (항목 $로 $ 배열) 난 그냥 foreach했을 경우 다음 항목 값을 1 될 것입니다 루프를 통해 처음입니다. 는 2 ~ 1 증가하고 다음에이 완료됩니다. 그래서 그 루프의 두 번째 패스 통과하고 해당 항목 수는 10 개입니다. 이 증가의 11 항목, 그리고 나선 그냥 버려진있어. 그런 다음 print_r ($ 배열) 및 주자이 10 만 1 것을 볼 수 있습니다. 그래서 우리가 한 증가가 손실되었습니다. 그러나 foreach ($ 배열로 & $ 품목) 지금은이 항목이 문제를 바로 여기서 같은 항목입니다. 이 같은 거에요. 따라서 $ 항목 + +은 배열 0을 수정합니다. 기본적으로, 당신은 또한 $ k를 할 수 있습니다 -> $ 항목을하고 $을 할 수 배열 [$ K] + +; 그 일을하는 다른 방법이 그래서, 우리는 항목을 수정할 수 무료 하지만 우리의 원래 배열을 수정하지 않습니다. 우리는 열쇠입니다 K를 사용하는 경우, 그럼 우리 배열에 불과 인덱스는 키를 사용하여 우리가 할 수 그리고 그렇게 증가. 이보다 직접적으로 우리의 원래의 배열을 수정합니다. 어떤 이유로 수정할 수있는 능력을 원한다면 당신은 그렇게 할 수 - 사실,이 완벽하게 합리적이다. 당신은 배열 $를 작성해야하고 싶지 않았어 [$ K] + +, 당신은 + 아이템 $를 작성하고 싶어 +하지만 당신은 여전히​​ 말을하고 싶었어요 경우 ($ K === '') 다음 항목을 증가하고 우리의 배열을 인쇄 할 수 있습니다. 이제 우리는 print_r 뭘 기대합니까? 어떤 값을 인쇄해야합니까? [학생] 2 10. >> 키가 아니었다면 [보덴] 만 ''우리가 실제로 그 사진을 인쇄 않습니다. 당신은 아마 매우 드물게, 만약 그 날, PHP에서 함수를 정의 할 필요가 없습니다 이 기능 어​​떤 같은 함수를 정의 곳하지만 비슷한 표시 될 수 있습니다. 보통 말 (foo는 $, $ 막대)하고 어떤 할을 정의합니다. 내가이 일을한다면, 해당, 무슨 일이든 뭐든 호출을 의미합니다 Baz도 호출간에 변경 될 수 있습니다 첫 번째 인수가 Baz도에 전달 있도록. $ foo는 작업을 수행 보자 + +; 안쪽으로 여기 Baz도를 ($ 항목) 한번 해보자 구, 이제 우리는 함수를 호출합니다. 인수가 참조에 의해 취해질 것이고, 어떤 의미 우리는 그것을 수정하는 경우 우리가 들어 전달 된 것을 수정하고 그리고 우리가 기대하는이 인쇄 - 내가 구문을 엉망으로하지 않는 한 - 우리, 2, 11이 그래서 실제로 증가했다. 우리는이 곳에서 참조가 필요납니다. 내가 이런 짓을한다면? 이것은 무엇을 의미할까요? [학생]이 변경됩니다. >> 그래. 항목은 배열에있는 값의 복사본입니다. 따라서 항목이 2로 변경되지만, 배열 [ ''] 계속 한 것입니다. 아니면 내가이 일을 어쩌지? 지금 항목 Baz도에 사본으로 전송됩니다. 따라서 인수의 복사본은 2 증가 될 것 하지만 항목 자체는 2 증가되지 않았다. 그리고 항목, 배열 브래킷 무엇이든 같은 일이 그래서 배열은 증가되지 않았다. 그래서 그 곳 둘 다 필요합니다. PHP는 일반적으로 이것에 대해 꽤 영리 해. 당신은 내가 참조에 의해 전달하려는 생각할 수 - 이와 같은 사실은 실제로 psets 중 하나를 질문했다. 마치 말 questions.txt 일이었다고 왜 참조하여이 구조체를 전달 할 수도? 그 대답은 무엇입니까? [학생]는 당신이 큰 일을 복사 할 필요가 없습니다 그래서. >> 그래. 구조체는 임의의 큰 될 수 있으며, 당신은 인자로 구조체를 통과 할 때 그것은 기능에 넘겨 해당 전체 구조체를 복사 할 필요가 당신은 참조에 의해 구조체를 통과하는 경우 반면 다음은 함수에 인자로 4 바이트 주소를 복사합니다. PHP은 그보다는 똑똑 약간 있습니다. 좀 기능이 내가 여기에 1000 가지의 배열을 전달하는 경우는, 그 방법은 우리가 그 모든 일 1,000을 복사해야 돼요 의미 기능에 합격 하는가? 이건 바로 그렇게 할 필요가 없습니다. 이 함수 내부는 실제로 푸 수정하지, 않는 경우 그래서 TRUE를 반환 ($ foo는 === '안녕하세요')합니다.; 우리가 실제로 함수의 인자 내부를 수정 결코주의, 이는 foo에 복사 할 필요가 없다니까요 어떤이에 전달 된 것을 의미합니다 그걸 수정하지 없기 때문입니다. 그래서 PHP와 작품 인자 인 방법은 항상 참조에 의해 전달된다 당신은 실제로 그것을 변경하려고 때까지. 나는 $ 푸 + + 말하면 지금, 지금 원래 foo는의 복사본을 만들어 복사본을 수정합니다. 이 시간을 절약 할 수 있습니다. 이 거대한 배열을 터치하지 않을 경우, 당신은 실제로 그것을 변경하지 않을 그것은 복사본을 만들 필요가 없습니다 우리는 그냥 그것을 복사하지 않습니다되므로 앰퍼샌드를 입력하면 반면 당신은 그걸 수정하려면 경우에도 마찬가지입니다. 이 문제는 복사 - 온 - 쓰기이라고합니다. 당신이 운영 체제 과정을 특히, 다른 곳에서 볼 수 있습니다. 복사 - 온 - 쓰기는 무언가의 사본을 만들 필요가 없습니다 매우 일반적인 패턴입니다 실제로 변경 한 경우 제외. 그래. 당신은 테스트 내부의 증가를했다 [학생] 어떤 경우에 그래서 1000에서 단 1 요소는 변경 될 필요가 있었을까요? 잘 모르겠 는데요. 나는 전체 일을 복사 거라고 생각하지만, 그것이 충분한 똑똑 가능합니다 - 사실, 내가 생각하는 것은 우리가이 모양 배열을 가지고 상상입니다 $ array2 = [ 그런 다음 색인 'A'는 [1 2 3 4] 및 색인 'B'의 배열 것은 무엇이든의 배열입니다. 모두 내가 사이에 쉼표가 필요합니다. 쉼표가있는 상상해보십시오. 그런 다음 'C'는 값 3. 좋아요. 자, 가자 우리는 $ Baz도 ($ array2)을 할 말을; 곳 Baz도는 참조하여이 문제를 고려하지 않습니다. 그래서 $ foo는 [ 'C'] + +; 이것은 우리가 인자로 array2을 통과 그러한 예입니다 다음 그것을 증가하여 배열의 특정 인덱스를 수정합니다. 솔직히 PHP가 무슨 짓을할지 몰라. , 그것은 쉽게 모든 게의 복사본을 만들 수 있습니다,하지만 똑똑 만약이는 별개의 값을 가지고 이러한 키의 복사본을 만들 것입니다 하지만 여전히 같은 배열 1,2,3,4를 가리킬 수 있습니다 이 여전히 동일한 배열을 가리킬 수 있습니다. 나는 아이 패드를드립니다. 우리는, [1,2,3,4]로,이 남자가 점 3이 배열에서 한 남자가 점을 통과 이 사람은 점 [34, ...] 이제 우리는 Baz도에 그것을 전달되고 있는지를, 우리는이 수정됩니다. PHP가 똑똑하다면, 그냥 할 수 - 우리는 여전히 일부 메모리를 복사했지만,이 거대한 중첩 subarrays가 있다면 우리는 사람들을 복사 할 필요가 없습니다. 그 얘기가 무엇을인지는 잘 모르겠지만, 난 그런 일을 상상할 수 있습니다. 이것은 또한 PHP 이상의 C의 아주 큰 장점입니다. PHP는 인생을 더 쉽게 많은 들어, 수 있습니다 하지만 가지가 수행 얼마나 잘 전혀 몰라 이 일이 복사본을 만드는 때 후드 아래에 아무 생각이 없기 때문에, 아, 그 일정한 시간 복사 될 것입니다, 그냥 한 포인터를 바꿀 것입니다, 이건 말도 안되게 어려운 선형 복사하실 건가요? 이 공간을 찾을 수없는 경우 어떻게해야합니까? 그 후 좀 더 공간을 얻을 가비지 수집을 실행해야합니까? 하고 가비지 컬렉션은 임의로 정도 걸릴 수 있습니다. C에서 당신은 이런 일에 대해 걱정할 필요가 없습니다. 당신이 쓸 때마다 한 줄은 수행 할거야 방법에 대한 꽤 많은 이유 수 있습니다. 의이으로 돌아 보자. 그게 당신이 해쉬 함수를 감당 해 내야 만하지 않는 것이 어떻게 좋다 연결리스트, 또는 그런 건 없나요? 해시 테이블로 작업하는 것은 이제 쉽게이기 때문에, 여기에서 작동 할 수있는 재미 퍼즐입니다. unique.php과의라는 파일을 열고는 PHP 프로그램을 작성 (또한 "스크립트"로 알려진). 그들은 당신이 명령 줄에서 실행하는 간단한 일 경우 우리는 그들을 스크립트를 호출하는 경향이 있습니다. 기본적으로, 당신은 컴파일되지 않지만 당신은 실행 파일을 실행 할거야하는 모든 언어 명령 줄에서 해당 실행 스크립트를 호출 할 수 있습니다. 난 단지뿐만 아니라이 일을 C 프로그램을 작성할 수 처음 그것을 컴파일하고 바이너리를 실행 이후 난 그걸 스크립트 호출하지 않습니다. 그러나 PHP 프로그램 우리는 스크립트를 호출거야. 아니면 우리가 파이썬이나 펄이나 Node.js 또는 그 일에 그런 쓴 경우, 당신은 명령 줄에서 그들을 실행하기 때문에 우리는 그들을 스크립트 호출 할 그러나 우리는 그들을 컴파일하지 않습니다. 우리는 너무 빨리이 작업을 수행 수 있습니다. 우리는 변수는 argv를 사용하지 않을 수 있습니다. 이런 식으로 불어 야지. 는 고유 한 전화 프로그램을 작성합니다. 당신은 입력이 한 줄에 하나의 단어가 포함 된 것이라고 가정 할 수 있습니다. 사실, 변수는 argv는 사용하기 아주 사소한 것입니다. unique.php. 우선 먼저, 우리는 우리가 한 명령 줄 인수를 전달되었는지 확인하고 싶습니다. 당신이 C에서 argc와 argv에 존재 기대하는 것처럼, 우리는 여전히 PHP의 설정을합니다. 그럼 내가 메시지 나 아무 것도 인쇄 처리되지 않습니다 ($ argc! == 2) 경우. 난 그냥 1 오류 코드를 종료합니다. 또 1 회복 될 수있을 것이다. 우리 몫 거의 PHP에서이 상태로되지 않습니다 - 보통은 함수에 의해 호출되는 함수에 의해 호출되는 함수에 의해 호출되는 함수에 있어요. 그리고 뭔가 일이 잘못되어서 방금 완전히 모든 프로그램을 종료하려는 경우는, 출구는 프로그램을 종료시킬 것이다. 이것은 또한 C.에있는 당신은 함수에서 함수에 함수에서 함수에 있다면 그리고 방금 프로그램을 죽이고 싶어, 당신은 출구를 호출 할 수 있으며 단지 종료됩니다. 그러나 PHP에서 우리가이 최상위 수준에있는 것으로 훨씬 더 드문 것입니다. 보통은 함수의 어떤 종류의 안으로, 그래서 우리는 출구를 호출 , 우리가 실현 한 것을 반환 할 필요가 없습니다 않도록 오류가 있습니다 그 오류가 발생했습니다 인식하면 그 친구는 최대 반환합니다. 우리는 정말 (1) 종료, 그 일을 싫어; 반환 (1),이 경우에는 이에 상응하는 것입니다. 그럼 우리가 열고 자하는 우리는 fopen하고 싶습니다. 인자는 매우 유사 할 수 있습니다. 우리는 fopen ($ argv가 [1], 우리는 독서를 위해 열하고 싶습니다.하고 싶은 우리가 F에 전화를하고 리소스를 반환합니다. 이것은 우리가 FILE *를 말 할 필요가 없어 제외하고 C이 어떻게 꽤 유사 해 보입니다. 대신 우리는 $ f를 말한다. 좋아요. 사실,이도 우리에게 파일을 호출 PHP 함수에 같은 힌트를 제공합니다 생각합니다. PHP 파일. 이게 어떻게 할 것은 배열로 전체 파일을 읽을 수 있습니다. 당신은 fopen을 할 필요가 없습니다. 그것은 당신을 위해 그렇게 할거야. 그럼 $ 라인 = 파일 ($ argv가 [1]); 이제 파일의 라인의 모든 라인에 있습니다. 이제 우리는 라인을 정렬하고 싶습니다. 우리가 어떻게 선을 정렬 할 수 있습니다? 우리는 선을 정렬합니다. 그리고 지금 우리가 뭐든간에를 인쇄 할 수 있습니다. 아마도 가장 쉬운 방법은 foreach ($ 라인 $로 라인) 라인 달러를 반향이다; [학생] 우리는 정렬에 정보를 참조하여 선을 통과하지 하시겠습니까? 정렬 함수를 정렬 (& $ 배열)로 정의 될 곳입니다. 이 함수를 호출 할 때이 참조하여 전달하지 않습니다. 이 참조로 복용으로 정의하는 기능입니다. 이 무엇이 잘못되었는지 정확히 실제로 우리가 5.3에서 5.4에 갔을때 우리는 우리의 서버에 모든 걸 걸었합니다. 5.4 때까지,이 완벽하게 합리적인했다. 함수는 참고 자료로 가져 기대하지 않지만, 당신은 참조로 전달할 수 있습니다 함수를 수정하는 일이 있다면, 그것은 여전히​​ 수정있어. 5.4부터, 당신은이 작업을 수행 할 수는 없을 것 같아. 함수가 명시 적으로 그런 짓을한다면 이제 당신이 참조에 의해 전달되는 유일한 방법입니다. 당신이 그것을 수정하지 않으려면 다음은 $ 사본 = $ 라인과 패스 사본을 수행해야합니다. 이제 줄은 보존되며 복사가 변경됩니다. php.unique.php. 내가 뭔가를 엉망으로했을 수 있습니다. 예기치 않은 '정렬'. 우리이 작업을 수행 뭔가있을거야. 심지어이 없습니다. 당신은 첫 번째 인수가 배열 될 것으로 예상되는 설명서를 읽을 때주의 그리고 그것은 참조에 의해 갔죠. 왜 나 한테 불평? 내가 원하지 않는 것으로 아직이 기능 정렬이 때문입니다. 좋아요, php.unique.php. 나는 파일이 없기 때문에 나는 그것을 인수를 통과하지 못했습니다. 이 test.php에 php.unique.php입니다. 여기 좋은 정렬 순서로 인쇄 test.php입니다. 정렬 순서는 코드 파일에 대한 좀 이상 한데요 것을 알 우리 빈 줄의 처음 오실거야 때문에 그러면 우리 한 수준 들여 쓰기를 모두 올 거에요 그러면 우리 더 들여 쓰기를 모두 갖추고 있습니다. 그래. >> [학생] 지금의 소스 코드는 참조에 의해 전달되지 않습니까? 그는 일반적으로 값에 의해 전달된다? [보덴]이 함수를 호출 할 때, 그는 참조에 의해 전달 된 여부를 결정하지 마십시오. 그것은이 참조에 의해 전달되었는지 여부를 결정하는 함수 정의입니다. 그리고 종류의 함수 정의를보고하거나 본을보고, 이 참조에 의한 인수를 걸립니다. 그럼에 관계없이 당신이 참조로 가져 할 것인지, 그렇습니다 참조하여보십시오. 이 곳에서 배열을 수정합니다. 이것은 단지 허용되지 않습니다. 이 작업을 수행 할 권한이 없습니다. >> [학생] 아, 그래요. [보덴]이, 정렬은 참조에 의해 라인을 가져 가서 수정 예정이다. 당신이 그렇게하고 싶지 않았어 다시 한번, 당신은 어떤 종류의 사본을 만들 수 있습니다. 심지어이 경우, 사본은 실제로 라인의 복사본이 아닙니다. 처음 수정됩니다 때까지, 그냥 같은 일을 가리 어디서 처음에는 정렬 기능으로 수정을 당할 것이다 위치 때문에 그건 복사에 쓰기, 지금 사본이 만들어 질 예정이다. 당신은 또한이 작업을 수행 할 수 있습니다. 당신은 앰퍼샌드를 볼 수있는 다른 장소들입니다. 당신은 foreach 루프에서 볼 수, 당신은 함수 선언에 표시 단지 변수를 지정할 때, 당신은 그걸를 참조하십시오. 이제 우리는이 일을하여 아무 것도 수행하지 않았 복사 및 라인이 그대로 같은 때문입니다. 당신은 줄을 사용하여 상호 교환 복사 할 수 있습니다. 그리고 그 설정 해제 행을하지 않습니다, 당신은 설정 해제 ($ 사본)를 할 수 당신은 같은 일에 대한 참조를 잃게됩니다. 따라서이 시점부터 지금 라인은 라인에 액세스 할 수있는 유일한 방법입니다. 질문이 있으십니까? 그래. 완전히 주제와 [학생]하지만 함께 PHP를 닫 할 필요가 없습니다 - 당신은 몰라 >>. 좋아요. [보덴]는을 닫 나쁜 관행이라는 말을하고만큼이나 나도 멀리합니다. 즉, 특히 스크립트에서, 아마 과장입니다 하지만이 작업을 수행하는 경우 어떤 일이 벌어지는 지 살펴 보자. 그래서 아무 것도하지 않았어. 내가 원한 경우 - [한숨] 나는 인수를 전달해야합니다. 쏴. 나는 잘못했다. 인수가 너무 php.unique.php. 지금은 이런 필요하지 않습니다. 내가 한 유효한 인수를 전달합니다. 이 기능은 인쇄하고 있건 인쇄. 나는 복사본을 인쇄 있고 사본이 존재하지 않습니다. 라인 그럼. 그것은 모든 인쇄하고 여기에 모든 물건을 발견 PHP의 아무것도 그 PHP 태그 밖에 있기 때문에 문자 그대로 인쇄 할 것이다. 왜 HTML이야, 내가 사업부, 어쩌구 저쩌구 클래스 또는 무엇이든을 할 수있는 것은 참으로 즐거운 일이야 그런 다음, 어쩌구 저쩌구하고 몇 가지 PHP 코드를 수행하고 최종 사업부 해. 그리고 지금, 나는 최고에 내 좋은 사업부를 모든이를 인쇄이 PHP 인쇄, 하단의 사업부. 이런 일이 일어날 때 비참한 즉, 아주 흔한 일입니다 파일의 맨 아래에있는 단지 길 잃은 바꿈. 당신은 큰 문제가되지 않을 거라 생각하지 않을 그 브라우저는 사실을 고려 할 때까지 - 어떻게 작업을 리디렉션 또는 기본적으로 모든 헤더 작업, 당신은 웹 사이트에 연결을하고 이러한 모든 헤더와 일 다시 보낼 때 응답 200 응답 리디렉션 또는 무엇이든 같이, 데이터의 첫 번째 바이트가 전송 될 때까지 헤더에만 유효합니다. 당신은 시대의 수천을 리디렉션하지만, 즉시 데이터의 첫 번째 바이트가 전송되기 때문에 수 당신은 다시 리디렉션 할 필요는 없을 것 같아. 당신은 파일의 맨 아래에 빗나간 줄 바꿈이있는 경우 과가이 기능을 사용 한 다음 원하는 그런 말을 해 - 이 index.php입니다 다른 파일입니다 말을하고 당신이 뭔가를 require_once하자 - 난 그 좋은 예 생각 할 수 없습니다. 맨 아래에있는이 라인은 에코됩니다 때 문제가 발생합니다. 당신은 아직 에코 된 것도 원하지 않아. 당신은 에코하기만한 의도하지 않았지만, 뭔가가 에코 됐지 그래서 지금 당신은 더 이상 헤더를 보낼 수는 없을 것 같아 당신은 불평을받을거야. 당신은 그 닫는 태그가 필요하지 않습니다. 당신은 HTML과 함께 무언가를 할 거라면 - 그리고 여기 사업부를 할 수 있도록 완벽하게 합리적 무엇이든 그리고이 시점에서 당신은 또는 당신이 그들을 포함 할 수 없습니다 수 있습니다. 정말 중요하지 않습니다. 그러나 PHP 스크립트에서 그것을 닫습니다 드문 것입니다. 모든 PHP, 절대적으로 모든 경우 당신은 정말 닫습니다 / 당신이 그것을 닫을 없습니다 필요하지 않습니다. 문자열을 다루는 것은 C.에서보다 훨씬 좋네요 PHP에서는 단일 또는 큰 따옴표로 문자열을 지정할 수 있습니다. 작은 따옴표를 사용하면 "탈출"시퀀스를 사용할 수 없습니다. 지속적으로,, 어쩌구 저쩌구를 탈출. 따라서 printf PHP에서 매우 드문 일입니다. pset 5가 sprintf이든 뭐든간에 사용 - 난 것은 일종의을 할 원한다면 printf 사용할 같아요. 하지만 당신은 001.jpg과 002.jpg을하고 싶어요. 그래서 그런 일에 대해 난 정말 printf 사용할 텍스트를 포맷 할 위치. 그러나 그렇지 않으면 그냥 문자열 연결을 사용합니다. 정말 printf 사용하지 않습니다. 우리는 작은 따옴표와 큰 따옴표 사이의 내용을 차별화하고 있습니다. 가장 큰 차이는 작은 따옴표가이 그대로 인쇄 될 것입니다. PHP에 문자 데이터 형식이 없습니다, C는 달리,이이에 해당집니다. 둘 다 문자열을하고 있습니다. 그리고 따옴표 문자열에 대한 좋은 점은 내가 말을 할 수있다 '안녕하세요 세상을!' , 어쩌구 저쩌구, $ $ wooo. 내가이가 그대로를 인쇄 할 것입니다 인쇄하면 어떻게됩니까. 의 물건을 모두 없애 ​​보자. 그럼 $ str1를 반향; , 달러 기호 : 그것은 말 그대로 그 모든 일 인쇄 당신은 뉴 라인 줄 알았는데 백 슬래시 N, - 그 모든 일이 그대로 출력합니다. 당신이 회피 할 필요가있는 유일한 방법은 작은 따옴표 아르 그렇지 않으면해서 그게 작은 따옴표를 닫는 것 같아요 것입니다. 따옴표, 완전히 다른. 우리는 이미 구문 강조가 무슨 심각하게 잘못된 갈 건지에 우리를 cluing을 참조하십시오. php.unique. 정의되지 않은 변수 : wooo이가 wooo라는 변수로 해석되기 때문입니다. 따옴표는에 변수를 삽입 보자 - $ 이름 = "롭"라고하자, 따라서 "안녕, 내 이름은 이름 $입니다!"에코; 이 변수로 인식합니다. 내가 그걸를 실행할 때 - 내가 줄 바꿈을 삽입합니다 - 안녕하세요, 제 이름은 롭입니다! 와, 안녕하세요! 제가 위 wooo의 인쇄를 제거 적이 있기 때문입니다. 당신이 할 수있는 한 더 단계가 있습니다. $ 배열 = [1, 2, 3]; 내가 배열의 첫 번째 인덱스를 인쇄하려면? 당신은 $ 배열 [0] 해. 구문 강조는 단서입니다. 이 무엇을 할거야? php.unique. 안녕하세요, 제 이름은 1입니다! 어떤 내가 원하던 게 아니 잖아. 구문 강조 나 한테 거짓말을 했어. 가자 시도는 'A'-> 1, 'B'-> 2.주세요 그건 내가 그걸를 작성해야 방법은 다음과 같습니다. 예기치 않은 작은 따옴표 (나불 나불 나불 T_ENCAPSED). 아이디어는 배열의 일환으로이 인식되지 않은 것으로합니다. 이 편지에서 색인을 생성 배열로이 인식 않아. 당신은 중괄호로 둘러싸인 그렇게되고 싶지 지금이 곱슬 괄호에있는 모든, 보간 될 것입니다 그건 우리가 마법의 오른쪽 장소에이 변수를 삽입하기위한 사용하는 단어입니다. 지금 php.unique는이 일을하고, 안녕하세요, 제 이름은 1입니다! 예상 또는 안녕, 내 이름은 롭입니다! 작은 따옴표에 대한 좋은 현상이야 하나가 있다는 것입니다 - 보간에 어떤 비용이있어. 당신이 따옴표를 사용하는 경우, 인터프리터는이 문자열을 통해 이동하는 , 확인하고 "아, 여기가 변수입니다. 지금은 그 변수를 가져 와서 여기를 삽입 가야 해요." 당신은 어떤 변수를 사용하지 않는 경우에도, 이 따옴표 내부 것도, 보정 할 필요가 없다 그것이 큰 따옴표를 건너다해야하기 때문했지만 여전히 느리게 될 것입니다 보간해야 할 일을 찾고 있어요. 아무것도 보정 할 필요가 없다다면 작은 따옴표는 조금 빠르게 할 수 있습니다 나는 '안녕, 내 이름은'에 대한 작은 따옴표를 사용하여도하는 경향이 있습니다. $ 배열 [ ''] 어쨌든. 그건 우리가 전에했던 일에 해당 될거야. 그러나 선호의 문제입니다. 당신이 PHP를 사용하는 경우, 당신은 아마 속도 차이에 대한 상관 없어. 로 시작하도록 논리는 충분히 없습니다. 모든 마지막 질문? 우리는 실제로 심지어 모든 통과하지 못했지만,이 물건은 지루했다. 당신이 HTML를 처리 할 때 PHP에 어떤 좋은 일입니다 마지막으로는, 당신은 변수를 인쇄 한번 비트, 그래서 좋은 바로 가기 구문을 사용합니다. 여기에 PHP를주지 않고, 이것은 짧은 태그 (short tags)라고합니다. 공식적으로 PHP 5.4의 등이 더 이상 사용되지 않습니다. 당신은 PHP를 넣어하는 것이 좋습니다. 이것은 여전히​​ <가 너무 짧은 태그를 지원합니다? = 아직 완벽하게 잘됩니다. 그것은 기본적으로 지원하므로 원하는대로이를 사용할 수 있습니다, 그들은 아주 편리하고 있습니다. 질문? 괜찮아요. , 샌디에이고 (San Diego) 고급 있어요. ㅠ ㅠ 안녕. [웃음] [박수] [웃음] [CS50.TV]