백엔드 개발 PHP 튜토리얼 PHP的基本常识小结_PHP

PHP的基本常识小结_PHP

Jun 01, 2016 pm 12:04 PM

这些PHP的概念,有些刚开始比较难懂,很难理解,我把他们都列出来,希望能帮助一些人,在前进的路上少点荆棘。

1. variable variables(变量的变量)

variable_variables.php

复制代码 代码如下:
$a = 'hello';
$hello = 'hello everyone';

echo $$a.'
';

$b = 'John';
$c = 'Mary';
$e = 'Joe';

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

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

$a = 'hello';

将hello 赋值给 变量 $a, 于是 $$a = ${hello} = $hello = 'hello everyone';

如果对于 $$students[1],  这样会产生混乱,php的解释器可能无法理解,‘[' 虽然有较高运算符,但结果可能无法输出。

好的写法是:${$students[1]} = ‘Mary';

2. array's function(数组函数)

 array_functions.php

复制代码 代码如下:
echo '

shift & unshift

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

// shifts first elemnt out of an array
// the index will reset
$a = array_shift($numbers);

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

// push element to the front of array
// returns the count of array and reset array index
$b = array_unshift($numbers, 'first');
echo '
b: '.$b.'
';
print_r($numbers);

echo '


';
echo '

pop & push

';
// pop the last element out of array
$c = array_pop($numbers);
print_r($numbers);
echo '
';

// push the element to the last of array
$d = array_push($numbers, 'last');
echo 'd: '.$d.'
';

print_r($numbers);


更多数组函数参考

3. dates and times (时间和日期)

有3种方法可以创建一个unix time(从1970/1/1 到现在的秒数)

time(); 返回当前的时间戳

mktime($hr, $min, $sec, $month, $day, $year); mktime(6,30,0,5,22,2012) 返回2012 5/22 6:30:00 的时间戳

strtotime($string); strtotime("+1 day") 返回明天这个时候的时间戳 更多 'last Monday' 'lasy Year'

checkdate($month, $day, $year); 验证一个日期是否为真 checkdate(5,32,2012) ? 'true' : 'false'; // return false

得到了时间戳后,我们需要对它进行转化为可读的,如2012/5/22

我们有2种方法 date($format, $timestamp) ; strftime($format [,$timestamp])

推荐用第2种,strftime("%Y-%m-%d %H:%M:%S"); // return 2012-05-22 15:46:40

更多时间日期参考

5. server variables (服务器和执行环境信息)

$_SERVER

server_variables.php

复制代码 代码如下:

echo 'SERVER details:
';
echo 'SERVER_NAME: '.$_SERVER['SERVER_NAME'].'
';
echo 'SERVER_ADD: '.$_SERVER['SERVER_ADDR'].'
';
echo 'SERVER_PORT: '.$_SERVER['SERVER_PORT'].'
';
echo 'DOCUMENT_ROOT: '.$_SERVER['DOCUMENT_ROOT'].'
';
echo '
';

echo 'Page details:
';
echo 'REMOTE_ADDR: '.$_SERVER['REMOTE_ADDR'].'
';
echo 'REMORT_PORT: '.$_SERVER['REMOTE_PORT'].'
';
echo 'REQUEST_URI: '.$_SERVER['REQUEST_URI'].'
';
echo 'QUERY_STRING: '.$_SERVER['QUERY_STRING'].'
';
echo 'REQUEST_METHOD: '.$_SERVER['REQUEST_METHOD'].'
';
echo 'REQUEST_TIME: '.$_SERVER['REQUEST_TIME'].'
';
echo 'HTTP_USER_AGENT: '.$_SERVER['HTTP_USER_AGENT'].'
';
echo '
';


更多详细信息

6.variable_scope(变量的作用域 global static)

static_variables.php
复制代码 代码如下:
function test()
{
    $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, 为静态变量。

引用:A static variable exists only in a local function scope, but it does not lose its value when program execution leaves this scope.

一个静态变量 只能存在于本地的函数作用域内 也就是test1() 函数体内, 但是当程序离开这个test1() 作用域时,静态变量不会失去它的值,也就是 $a 变量会增加 1; 当重新调用 test1() 时,$a = 1;

global_variables.php

复制代码 代码如下:
$a = 1;
$b = 2;

function Sum()
{
    global $a, $b;

    $b = $a + $b;
}

Sum();
echo $b;
echo '


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

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

Sum1();
echo $b;

引用:In PHP global variables must be declared global inside a function if they are going to be used in that function

如果这些变量将在函数中使用,全局变量必须在使用的那个函数中进行定义。 这样可以避免很多麻烦。

更多详细信息

7.reference(引用)

variable_reference.php
复制代码 代码如下:
$a = 'arist';
$b = $a;
$b = 'ming';
echo "My name is:{$a}. But my mother call me {$b}.
";

echo '


';

$a = 'arist';
$b = &$a;
$b = 'ming';

echo "My name is:{$a}. And my mother call me {$b}.
";


这个概念可以这样理解,我妈叫我明明,但是我的领导会叫我小言;不管是明明或者是小言,都是我。
'&' 而这个就是不同的人叫我们的别名的方法 即引用,相当于 $a = {我,或者内存中的值} , $b = {领导,妈妈,或者变量}
通过 & , $b指向了$a 在内存中唯一也是相同的值。 所以不管你领导叫你什么,或者你妈叫你什么,你都是你。只是称呼不同。

所以通过引用后, 我们改变$b的值,同时也改变了$a的值。

8. pass reference variable to function(传递引用参数给函数)

复制代码 代码如下:
function ref_test(&$var){
return $var *= 2;
}

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


当我们按引用传递参数给函数时,我们传递地不是变量的副本(copy) ,而是真实的值,

所以当我们调用函数ref_test($a)的时候已经改变了 $a 的值, 所以最后 $a = 20;

9. reference function return value(引用函数的返回值)

reference_function_return_value.php

复制代码 代码如下:
function &increment(){
static $var = 0;
$var++;
return $var;
}

$a =& increment(); // 1
increment(); // 2
$a++; //3
increment(); // 4
echo "a: {$a}";


首先申明一个引用函数,在函数体内,申明一个静态变量 $var, 可以保存增加的值;

$a =& increment(); 这条语句是 变量$a 引用 函数increment() 的返回值,

和前面的引用变量一样, 你可以把increment()函数, 看作是一个变量; 这样就变为 $a = & $b;

所以increment() 和 $a 都指向同一个值,改变任何一个,都能改变同一个值。

更多详细信息

对象 OOP

1.Fatal error: Using $this when not in object context

这个错误刚学 OOP 肯定容易出现,因为有个概念你没有真正理解。 类的可访问性(accessible),也可以说是作用域, 你还可以认为是 1个 中国人 在国外,他不属于哪个文化,他不讲外语(可能他知道点);但是他无法通过自己跟老外沟通,因为他们不是在一个共同国度出生。
那么错误是如何发生的呢?看下面的例子:

复制代码 代码如下:
 class Trones{
     static public $fire = "I am fire.";
      public $water = "I am water";

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

     static function Fire( ) {
         return self::$fire ;  // be sure you use self to access the static property before you invoke the function
     }
 }

 /*
 Fatal error: Using $this when not in object context
 */
 //echo Trones::getFire( ) ;
 //echo Trones::getWater( ) ;

 // correct
 echo Trones::Fire( );
 echo "
" ;
 $trones = new Trones ;
 $trones->fire ; // Notice: Undefined property: Trones::$fire (base on defferent error setting) simple is error
 echo Trones::$fire ;

这个错误很经典, 也很实用,先看 static 的定义:

Declaring class properties or methods as static makes them accessible without needing an instantiation of the class. A property declared as static can not be accessed with an instantiated class object (though a static method can).

翻译:定义一个类的属性或方法为静态时,可以使他们在不需要初始化一个类时就能直接访问 。一个被定义为了静态的属性不能被类的对象用对象操作符访问* -> *,(可以通过静态的方法访问)。

例子说明:
7行 10行 犯了同一个错误,第一个是用对象操作符来访问静态变量。你看看定义,$this 是一个伪变量 相当于 object,一个实例。你用对象操作符 -> 访问就会报错。

同样你也不能用 静态操作符 :: 来访问一个公共变量 。 正确的访问应该是 14行 25行,一个是在类的定义里访问(self:: === Trones::),一个是在类的外部访问。

对于继承类,以上的规则同样适合。

2.Fatal error: Call to private method


最近有部连续剧很好看,叫权利的游戏,我们假设有 3方人马, 7个国王, 平民, 龙女。 他们三方人马在下面争夺最终的胜利, 也就是王冠。

下面的故事还有一个标题:类的可见性(visibility) 你如果知道最终的答案,解释部分你可以略过了。

复制代码 代码如下:
 class Trones {
     protected $fire = " fire ";
     public $water = " water " ;
     static private $trones  = "Trones";

     protected function getFire( ) {
         $this->fire ;
     }

     static public function TheDragenOfMather( ) {
         return __METHOD__." use ".$this->getFire()." gets the ".self::getTrones( ) ;
     }

     static public function getWater( ) {
         return __METHOD__ ;
     }

     static private function getTrones( ) {
         return  self::$trones ;
     }

 }

 class Kings extends Trones {
     static function TheSevenKing( ) {
         return __METHOD__."gets the ".self::getTrones( );
     }
 }

 class People extends Trones{
     static function ThePeople( ) {
         return __METHOD__."gets the ".self::getTrones( );
     }
 }
 echo Kings::TheSevenKing( ) ;
 echo Trones::TheDragenOfMather( ) ;
 echo People::ThePeople( ) ;


正确答案是:7国征战 内斗,平民死伤无数,龙女想乘机渔翁得利;可惜 最终谁也没有得到皇冠和胜利。哈哈。

当static 碰到 private ,结合产生复杂,也产生美;就像抽象的人,像我们大学老师讲的数学课;(不过网易的公开数学课很好)

如果想要龙女 获得最后的胜利, 你只要帮她一把 将13行的 $this->getFire() 这部分去掉就可以了。同样的道理 你无法在一个静态函数里 使用任何对象操作符。

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

如果你不构建大型的框架和网站 这些概念比如 Interface Implement abstract 。。。 你还是不知道的好。

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> ​​'Hello World', 'github.com'=> ​​[ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP 로깅 : PHP 로그 분석을위한 모범 사례 PHP 로깅 : PHP 로그 분석을위한 모범 사례 Mar 10, 2025 pm 02:32 PM

PHP 로깅은 웹 애플리케이션을 모니터링하고 디버깅하고 중요한 이벤트, 오류 및 런타임 동작을 캡처하는 데 필수적입니다. 시스템 성능에 대한 귀중한 통찰력을 제공하고 문제를 식별하며 더 빠른 문제 해결을 지원합니다.

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

PHP에서 늦은 정적 결합의 개념을 설명하십시오. PHP에서 늦은 정적 결합의 개념을 설명하십시오. Mar 21, 2025 pm 01:33 PM

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. 프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법. Mar 28, 2025 pm 05:12 PM

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

See all articles