>  기사  >  php教程  >  PHP_php 기초에 대한 기본 지식 요약

PHP_php 기초에 대한 기본 지식 요약

WBOY
WBOY원래의
2016-05-16 09:00:071995검색

이러한 PHP 개념 중 일부는 처음에는 이해하기 어렵습니다. 일부 사람들에게 도움이 되고 앞으로의 어려움을 줄이기 위해 모두 나열해 보겠습니다.

1. 가변변수

variable_variables.php

코드 복사 코드는 다음과 같습니다.

$a = '안녕하세요';
$hello = '안녕하세요 여러분';

echo $$a.'
';

$b = '존';
$c = '메리';
$e = '조';

$students = array('b','c','e');

echo ${$students[1]};
/*
foreach($students as $seat){
echo $$seat.'
';
}
$$var[1]
${$var[1]} for #1
*/

$a = '안녕하세요';

hello를 변수 $a에 할당하여 $$a = ${hello} = $hello = 'hello everything';

$$students[1]의 경우 혼란을 야기할 수 있으며, '['의 연산자가 더 높더라도 결과가 출력되지 않을 수 있습니다.

다음과 같이 작성하는 것이 좋습니다: ${$students[1]} = 'Mary'

2. 배열의 함수(array function)

array_functions.php

코드 복사 코드는 다음과 같습니다.

echo ' ';
$numbers = array(1,2,3,4,5,6);
print_r($numbers);
echo '< ;br / >';

// 배열에서 첫 번째 요소를 이동합니다.
// 인덱스가 재설정됩니다.
$a = array_shift($numbers);

echo 'a: '.$a.'
';
print_r($numbers);

// 요소를 배열 앞쪽으로 푸시
// 배열 개수를 반환하고 배열 인덱스를 재설정합니다.
$b = array_unshift($numbers, 'first');
echo '
b: '.$b.'
';
print_r($numbers);

echo '


';
echo '

pop & push

';
// 배열에서 마지막 요소 팝
$c = array_pop($numbers);
print_r($numbers);
echo '
';

// 요소를 배열의 마지막으로 푸시
$d = array_push($numbers, 'last');
echo 'd: '.$d.'
';

print_r($numbers);



더 많은 배열 함수 참조

3. 날짜 및 시간(time and date)

Unix 시간을 만드는 방법에는 3가지가 있습니다(1970년 1월 1일부터 현재까지의 초 수)

time(); 현재 타임스탬프를 반환합니다

mktime($hr, $min, $sec, $month, $day, $year); 2012) 2012년 5/22 6:30:00

strtotime($string); strtotime("+1 day") 내일 이 시간의 타임스탬프를 반환 more '지난 월요일' ' Lasy Year '

checkdate($month, $day, $year); 날짜가 참인지 확인 checkdate(5,32,2012) ? 'true' : 'false' // return false

타임스탬프를 얻은 후 이를 2012/5/22와 같이 읽을 수 있는 형식으로 변환해야 합니다.

2가지 방법이 있습니다 date($format, $timestamp); strftime($ format [,$timestamp] )

두 번째 유형인 strftime("%Y-%m-%d %H:%M:%S")를 사용하는 것이 좋습니다. // return 2012-05-22 15 :46: 40

추가 시간 및 날짜 참고

5. 서버변수(서버 및 실행환경정보)

$_SERVER

server_variables.php

코드 복사 코드는 다음과 같습니다.


echo 'SERVER 세부정보:
' ;
echo 'SERVER_NAME: '.$_SERVER['SERVER_NAME'].'
'
echo 'SERVER_ADD: '.$_SERVER['SERVER_ADDR'].'< br /> ;'
echo 'SERVER_PORT: '.$_SERVER['SERVER_PORT'].'
'
echo 'DOCUMENT_ROOT: '.$_SERVER['DOCUMENT_ROOT'].'
';
echo '
'

echo '페이지 세부정보:
'
echo 'REMOTE_ADDR: '.$ _SERVER[' REMOTE_ADDR'].'
';
echo 'REMORT_PORT: '.$_SERVER['REMOTE_PORT'].'
'
echo 'REQUEST_URI: ' .$_SERVER ['REQUEST_URI'].'
';
echo 'QUERY_STRING: '.$_SERVER['QUERY_STRING'].'
'; : '.$_SERVER['REQUEST_METHOD'].'
'
echo 'REQUEST_TIME: '.$_SERVER['REQUEST_TIME'].'
'; 'HTTP_USER_AGENT: '.$_SERVER['HTTP_USER_AGENT'].'
'
echo '
';

자세히 보기

6.variable_scope(변수 전역 정적 범위)

static_variables.php

코드 복사 코드는 다음과 같습니다.

함수 테스트()
{
$a = 0;
echo $a;
$a++;
}

test();
echo '
';
test();
echo '
';
test();
echo '
';

echo '


';
function test1()
{
static $a = 0;
echo $a;
$a++;
}

test1();
echo '
';
test1();
echo '
';
test1();
echo '
';

test() 함수의 변수 $a는 $a++의 결과를 저장하지 않으며 test()를 반복해서 호출해도 $a의 값이 증가하지 않습니다

test1() 함수의 변수 $a는 정적 변수인 staic $a = 0을 선언합니다.

인용문: 정적 변수는 로컬 함수 범위에만 존재하지만 프로그램 실행이 이 범위를 벗어나도 값을 잃지 않습니다.

정적 변수는 로컬 함수 범위, 즉 test1() 함수 본문에만 존재할 수 있지만 프로그램이 test1() 범위를 벗어나면 정적 변수는 해당 값, 즉 $를 잃지 않습니다. test1()이 다시 호출되면 변수는 1씩 증가합니다. $a = 1;

global_variables.php

코드 복사 코드는 다음과 같습니다.

$a = 1;
$b = 2;

함수 Sum()
{
전역 $a, $b;

$b = $a + $b;
}

Sum();
echo $b;
echo '


';
$a = 1;
$b = 2;

함수 Sum1()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

Sum1();
echo $b;

인용문: PHP에서 전역 변수는 해당 함수에서 사용되려면 함수 내에서 전역으로 선언되어야 합니다

이러한 변수가 함수에 사용되는 경우 해당 함수에 전역 변수를 정의해야 합니다. 이렇게 하면 많은 문제를 피할 수 있습니다.

자세히 보기

7.reference(reference)

variable_reference.php

코드 복사 코드는 다음과 같습니다.

$a =
$b = $ a ;
$b = 'ming';
echo "제 이름은 {$a}입니다. 그런데 어머니는 저를 {$b}라고 부르세요."

echo '<시간 />';

$a = 'arist';
$b = &$a; $b = 'ming'; " 제 이름은 {$a} 입니다. 어머니는 저를 {$b}라고 부르세요.
"



이 개념은 이렇게 이해하시면 됩니다, 어머니 저를 Mingming이라고 부르는데, 상사는 저를 Xiaoyan이라고 부르죠. 당연하든 Xiaoyan이든 저예요.
'&' 그리고 이것은 사람들이 우리를 별칭, 즉 참조라고 부르는 방식입니다. 이는 $a = {나 또는 메모리의 값}, $b = {리더, 어머니 또는 변수}와 동일합니다.
&를 통해 $b는 메모리에 있는 $a의 유일하고 동일한 값을 가리킵니다. 그러므로 당신의 상사가 당신을 뭐라고 부르든, 당신의 어머니가 당신을 뭐라고 부르든, 당신은 바로 당신입니다. 이름만 다를 뿐입니다.

참조를 전달한 후 $b 값을 변경하고 $a 값도 변경합니다.


8. 참조 변수를 함수에 전달(참조 매개변수를 함수에 전달)



코드 복사 코드는 다음과 같습니다: function ref_test(&$var){
return $var *= 2
}

$a = 10;
ref_test($a);
echo $a;



참조로 매개변수를 전달할 때 변수를 전달하면 복사되지만 실제 값은

따라서 ref_test($a) 함수를 호출하면 $a의 값이 변경되므로 결국 $a = 20; >9. 참조 함수 반환 값(참조 함수 반환 값)

reference_function_return_value.php





코드 복사
코드는 다음과 같습니다.

함수 &increment(){
static $var = 0
$var++
return $var; $a =& increment(); // 1
increment(); // 2
increment() // 4
echo " }";



먼저 참조 함수를 선언합니다. 함수 본문에서 증가된 값을 저장할 수 있는 정적 변수 $var를 선언합니다.
$a =& increment( ); 이 구문은 $a 참조 함수 increment()의 반환 값입니다.

는 이전 참조 변수와 동일합니다. $ a = & $b;

따라서 increment()와 $a는 모두 동일한 값을 가리킵니다. 둘 중 하나를 변경하면 동일한 값이 변경될 수 있습니다.


자세히 보기


객체 OOP

1.치명적인 오류: 객체 컨텍스트가 아닐 때 $this 사용 이러한 실수는 OOP를 처음 배울 때 확실히 일어나기 쉽습니다. 실제로 이해하지 못하는 개념이 있기 때문입니다. 클래스의 접근성도 범위라고 할 수 있습니다. 해외의 중국인을 생각할 수도 있습니다. 그는 어떤 문화에도 속하지 않으며 외국어를 구사하지 못하지만 (어쩌면 조금 알고 있습니다.) 같은 나라에서 태어나지 않았기 때문에 외국인들과 소통하세요.

그럼 오류는 어떻게 발생한 걸까요? 아래 예를 살펴보세요.


코드 복사

static public $fire = "나는 불이다.";
public $water = "나는 물이다";

static function getFire( ) {
return $this-> fire ; / / 틀림
}
static function getWater( ) {
  return $self::water ; // 틀림
}

static function Fire( ) {
return self: :$fire ; // 함수를 호출하기 전에 self를 사용하여 정적 속성에 액세스해야 합니다.
}
}

/*
치명적인 오류: 다음과 같은 경우 $this를 사용합니다. 객체 컨텍스트에 없음
*/
//echo Trones::getFire( ) ;
//echo Trones::getWater( ) ;

// 정확함
echo Trones: :Fire( );
echo "
" ;
$trones = new Trones ;
$trones->fire ; // 주의: 정의되지 않은 속성: Trones::$fire ( 다른 오류 설정에 따라) 단순은 오류
echo Trones::$fire ;



이 실수는 매우 고전적이고 매우 실용적입니다. 먼저 정적 정의를 살펴보겠습니다.
클래스 속성이나 메서드를 정적으로 선언하면 클래스를 인스턴스화할 필요 없이 액세스할 수 있습니다. 정적으로 선언된 속성은 인스턴스화된 클래스 객체로 액세스할 수 없습니다(정적 메서드는 가능함).

번역: 클래스의 속성이나 메서드를 정적으로 정의하면 클래스를 초기화하지 않고도 직접 액세스할 수 있습니다. static으로 정의된 속성은 개체 연산자 * -> *를 사용하여 클래스의 개체에서 액세스할 수 없습니다(정적 메서드를 통해 액세스할 수 있음).

설명 예:

7행과 10행은 동일한 실수를 범했습니다. 첫 번째는 객체 연산자를 사용하여 정적 변수에 액세스하는 것입니다. 정의를 보면 $this는 인스턴스인 object에 해당하는 의사 변수입니다. 개체 연산자 ->를 사용하여 액세스하면 오류가 보고됩니다.

마찬가지로 정적 연산자 ::를 사용하여 공용 변수에 액세스할 수 없습니다. 올바른 액세스는 14행과 25행이어야 하며, 하나는 클래스 정의(self:: === Trones::)에서 액세스되고, 다른 하나는 클래스 외부에서 액세스됩니다.


상속된 클래스의 경우 위의 규칙도 적용됩니다.

2.치명적인 오류: 개인 메소드 호출

최근 왕좌의 게임이라는 매우 흥미로운 TV 시리즈가 있습니다. 3개의 정당, 7명의 왕, 평민, 용의 여인이 있다고 가정합니다. 세 사람은 최종 승리, 즉 왕관을 놓고 치열한 경쟁을 펼쳤다.

다음 스토리에도 제목이 있습니다: Class visible(가시성) 최종 답변을 알고 계시다면 설명 부분을 건너뛰셔도 됩니다.


코드 복사

코드는 다음과 같습니다.

 class Trones {
     protected $fire = " fire ";
     public $water = " water " ;
     static private $trones  = "Trones";

     보호된 함수 getFire( ) {
         $this->fire ;
     }

     정적 공개 함수 TheDragenOfMather( ) {
         return __METHOD__." use ".$ this->getFire()."는 ".self::getTrones( ) ;
     }

     정적 공개 함수 getWater( ) {
         return __METHOD__ ;
     }
을 가져옵니다.
     정적 비공개 함수 getTrones( ) {
         return  self::$trones ;
     }

 }

 class Kings는 Trones를 확장합니다. {
     정적 함수 TheSevenKing( ) {
         return __METHOD__."는 ".self::getTrones( );
     }
 }

클래스 People 확장 Trones{
     정적 함수 ThePeople( ) {
return __METHOD__."는 ".self::getTrones( );
     }
 }
 echo Kings::TheSevenKing( ) ;
 echo Trones::TheDragenOfMather( ) ;
 echo People을 가져옵니다. ::ThePeople( ) ;


正确答案是:7國征战 内斗,平民死伤无数,龙女想乘机渔翁得利;可惜 最终谁没有得到皇冠和胜利.哈哈。 如果想要龙女 获得最后的胜利, 你只要帮她一把 将13行的 $this->getFire() 这part分去掉就可以了.一个静态函数里 使用任何对象操작곡。

怎么使人민获得王冠呢? 你去奋斗吧!

如果你不构建大型的框架和网站 这些概念比如 인터페이스 구현 개요 。。。 你还是不知道的好。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.