PHP的基本常识.docx

上传人:b****6 文档编号:5866364 上传时间:2023-01-01 格式:DOCX 页数:11 大小:21.80KB
下载 相关 举报
PHP的基本常识.docx_第1页
第1页 / 共11页
PHP的基本常识.docx_第2页
第2页 / 共11页
PHP的基本常识.docx_第3页
第3页 / 共11页
PHP的基本常识.docx_第4页
第4页 / 共11页
PHP的基本常识.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

PHP的基本常识.docx

《PHP的基本常识.docx》由会员分享,可在线阅读,更多相关《PHP的基本常识.docx(11页珍藏版)》请在冰豆网上搜索。

PHP的基本常识.docx

PHP的基本常识

PHP的基本常识

(1)

这些是写给初级PHP程序员或者入门不久的同学的,老鸟可以飘过,欢迎补充和评论;接受合理意见与批评。

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

1.variablevariables(变量的变量)

variable_variables.php

 

 ViewCode

 

php

$a='hello';

$hello='helloeveryone';

echo$$a.'
';

$b='John';

$c='Mary';

$e='Joe';

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

echo${$students[1]};

/*

foreach($studentsas$seat){

   echo$$seat.'
';

}

 $$var[1]

 ${$var[1]}for#1

*/

 

 

$a='hello';

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

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

好的写法是:

${$students[1]}=‘Mary’;

2.array'sfunction(数组函数)

 array_functions.php

 ViewCode

 

php

echo'

shift&unshift

';

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

print_r($numbers);

echo'
';

//shiftsfirstelemntoutofanarray

//theindexwillreset

$a=array_shift($numbers);

echo'a:

'.$a.'
';

print_r($numbers);

//pushelementtothefrontofarray

//returnsthecountofarrayandresetarrayindex

$b=array_unshift($numbers,'first');

echo'
b:

'.$b.'
';

print_r($numbers);

echo'


';

echo'

pop&push

';

//popthelastelementoutofarray

$c=array_pop($numbers);

print_r($numbers);

echo'
';

//pushtheelementtothelastofarray

$d=array_push($numbers,'last');

echo'd:

'.$d.'
';

print_r($numbers);

 

 3.datesandtimes(时间和日期)

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

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

mktime($hr,$min,$sec,$month,$day,$year);mktime(6,30,0,5,22,2012)返回20125/226:

30:

00的时间戳

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

----------------------------------------------------------

checkdate($month,$day,$year);验证一个日期是否为真checkdate(5,32,2012)?

'true':

'false';//returnfalse

 

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

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

推荐用第2种,strftime("%Y-%m-%d%H:

%M:

%S"); //return2012-05-2215:

46:

40

 

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

$_SERVER

server_variables.php

 ViewCode

 

php

echo'SERVERdetails:


';

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'Pagedetails:


';

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(变量的作用域globalstatic)

static_variables.php

 ViewCode

 

php

functiontest()

{

   $a=0;

   echo$a;

   $a++;

}

test();

echo'
';

test();

echo'
';

test();

echo'
';

echo'


';

functiontest1()

{

   static$a=0;

   echo$a;

   $a++;

}

test1();

echo'
';

test1();

echo'
';

test1();

echo'
';

 

test()函数中的变量$a没有保存$a++的结果,重复调用test()并没有使$a的值增加

而test1()函数中变量$a申明了staic$a=0,为静态变量。

引用:

Astaticvariableexistsonlyinalocalfunctionscope,butitdoesnotloseitsvaluewhenprogramexecutionleavesthisscope.

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

global_variables.php

 ViewCode

 

php

$a=1;

$b=2;

functionSum()

{

   global$a,$b;

   $b=$a+$b;

}

Sum();

echo$b;

echo'


';

$a=1;

$b=2;

functionSum1()

{

   $GLOBALS['b']=$GLOBALS['a']+$GLOBALS['b'];

}

Sum1();

echo$b;

 

引用:

InPHPglobalvariablesmustbedeclaredglobalinsideafunctioniftheyaregoingtobeusedinthatfunction

如果这些变量将在函数中使用,全局变量必须在使用的那个函数中进行定义。

这样可以避免很多麻烦。

7.reference(引用)

variable_reference.php

 ViewCode

 

php

$a='arist';

$b=$a;

$b='ming';

echo"Mynameis:

{$a}.Butmymothercallme{$b}.
";

echo'


';

$a='arist';

$b=&$a;

$b='ming';

echo"Mynameis:

{$a}.Andmymothercallme{$b}.
";

 

这个概念可以这样理解,我妈叫我明明,但是我的领导会叫我小言;不管是明明或者是小言,都是我。

'&'而这个就是不同的人叫我们的别名的方法即引用,相当于$a={我,或者内存中的值},$b={领导,妈妈,或者变量}

通过&,$b指向了$a在内存中唯一也是相同的值。

所以不管你领导叫你什么,或者你妈叫你什么,你都是你。

只是称呼不同。

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

8.passreferencevariabletofunction(传递引用参数给函数)

 

php

functionref_test(&$var){

   return$var*=2;

}

$a=10;

ref_test($a);

echo$a;

 

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

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

9.referencefunctionreturnvalue(引用函数的返回值)

reference_function_return_value.php

 

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都指向同一个值,改变任何一个,都能改变同一个值。

PHP的基本常识

(2)

对象OOP

1.Fatalerror:

Using$thiswhennotinobjectcontext

这个错误刚学OOP肯定容易出现,因为有个概念你没有真正理解。

类的可访问性(accessible),也可以说是作用域,你还可以认为是1个中国人在国外,他不属于哪个文化,他不讲外语(可能他知道点);但是他无法通过自己跟老外沟通,因为他们不是在一个共同国度出生。

那么错误是如何发生的呢?

看下面的例子:

 

 1

php

 2classTrones{

 3    staticpublic$fire="Iamfire.";

 4     public$water="Iamwater";

 5    

 6    staticfunctiongetFire(){

 7        return$this->fire;//wrong

 8    }

 9    staticfunctiongetWater(){

10        return$self:

:

water; //wrong

11    }

12    

13    staticfunctionFire(){

14        returnself:

:

$fire; //besureyouuseselftoaccessthestaticpropertybeforeyouinvokethefunction

15    }

16}

17

18/*

19Fatalerror:

Using$thiswhennotinobjectcontext

20*/

21//echoTrones:

:

getFire();

22//echoTrones:

:

getWater();

23

24//correct

25echoTrones:

:

Fire();

26echo"
";

27$trones=newTrones;

28$trones->fire;//Notice:

Undefinedproperty:

Trones:

:

$fire(baseondefferenterrorsetting)simpleiserror

29echoTrones:

:

$fire;

 

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

Declaringclasspropertiesormethodsasstaticmakesthemaccessiblewithoutneedinganinstantiationoftheclass.Apropertydeclaredasstaticcannotbeaccessedwithaninstantiatedclassobject(thoughastaticmethodcan).

翻译:

定义一个类的属性或方法为静态时,可以使他们在不需要初始化一个类时就能直接访问。

一个被定义为了静态的属性不能被类的对象用对象操作符访问*->*,(可以通过静态的方法访问)。

例子说明:

7行10行犯了同一个错误,第一个是用对象操作符来访问静态变量。

你看看定义,$this是一个伪变量相当于object,一个实例。

你用对象操作符->访问就会报错。

同样你也不能用静态操作符:

:

来访问一个公共变量。

正确的访问应该是14行25行,一个是在类的定义里访问(self:

:

===Trones:

:

),一个是在类的外部访问。

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

------------------------------------------------------分割线--------------------------------------------------------------------------------------

2.Fatalerror:

Calltoprivatemethod

最近有部连续剧很好看,叫权利的游戏,我们假设有3方人马,7个国王,平民,龙女。

他们三方人马在下面争夺最终的胜利,也就是王冠。

下面的故事还有一个标题:

类的可见性(visibility)你如果知道最终的答案,解释部分你可以略过了。

 

 

 1

php

 2

 3classTrones{

 4    protected$fire="fire";

 5    public$water="water";

 6    staticprivate$trones ="Trones";

 7    

 8    protectedfunctiongetFire(){

 9        $this->fire;

10    }

11    

12    staticpublicfunctionTheDragenOfMather(){

13        return__METHOD__."use".$this->getFire()."getsthe".self:

:

getTrones();

14    }

15    

16    staticpublicfunctiongetWater(){

17        return__METHOD__;

18    }

19    

20    staticprivatefunctiongetTrones(){

21        return self:

:

$trones;

22    }

23

24}

25

26classKingsextendsTrones{

27    staticfunctionTheSevenKing(){

28        return__METHOD__."getsthe".self:

:

getTrones();

29    }

30}

31

32classPeopleextendsTrones{

33    staticfunctionThePeople(){

34        return__METHOD__."getsthe".self:

:

getTrones();

35    }

36}

37echoKings:

:

TheSevenKing();

38echoTrones:

:

TheDragenOfMather();

39echoPeople:

:

ThePeople();

 

 

 

正确答案是:

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

哈哈。

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

如果想要龙女获得最后的胜利,你只要帮她一把将13行的$this->getFire()这部分去掉就可以了。

同样的道理你无法在一个静态函数里使用任何对象操作符。

怎么使人民获得王冠呢?

你去奋斗吧!

 

如果你不构建大型的框架和网站这些概念比如InterfaceImplementabstract。

你还是不知道的好。

 

PHP面向对象的进阶学习

学习内容:

抽像类、接口、final、类常量

 

一、抽像类(abstract)

       在我们实际开发过程中,有些类并不需要被实例化,如前面学习到的一些父类,主要是让子类来继承,这样可以提高代码复用性

语法结构:

   abstractclass类名{

       属性$name;

       方法(){} //方法也可以为abstract修饰符function方法名(){}

   }

例:

   abstractclassanimal{

       public$name;

       public$age;

       //抽象方法不能有方法体,主要是为了让子类去实现;

       abstractpublicfunctioncry();

       //抽象类中可以包含抽象方法,同时也可以包含实例类方法

       publicfunctiongetname(){

           echo$this->name;

       }

   }

   classCat{

       publicfunctioncry(){

           echo'ok';

       }

   }

 

   理解:

动物类,实际上是一个抽象的概念,它规定了一些动物有些哪共同的属性和行为,但实际上它自己并没收有那些属性和行为。

再比如:

交通工具类,植物类等等

 

注意:

   1、如果一个类用了abstract来修饰,则该类就是一个抽象类,如果一个方法被abstract修饰,那么该方法就是一个抽象方法,抽象方法不能有方法体=>abstractfunctioncry(); 连{}也不可以有

   2、抽象类一定不能被实例化,抽象类可以没有抽象方法,但是如果一个类包含了任意一个抽象方法,这个类一定要声明为abstract类;

   3、如果一个类继承了另一个抽象类,则该子类必须实现抽象类中所有的抽象方法(除非它自己也声明为抽象类);

 

二、接口(interface)

       接口就是将一些没有实现的方法,封装在一起,到某个类要用的时候,再根据具体情况把这些方法写出来;

       语法结构

           interface接口名{

               //属性、方法

               //接口中的方法都不能有方法体;

           }

           如何实现接口

           class类名implements接口名{

 

           }

       理解:

接口就是更加抽象的抽象类,抽象类里的方法可以有方法体,但是接口中的方法必须没有方法体。

接口实现了程序设计的多态和高内聚、低偶合的设计思想;

 

例:

       //接口是定义规范、属性的,一般以小写的i开头;

       interfaceiUsb{

           publicfunctionstart();

           publicfunctionstop();

       }

       //编写相机类,让它去实现接口

       

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1