在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
先解释一下题目,最近这段时间突然就忙了起来,预计之后还要更忙,一天忙来忙去却不知道在忙些啥,人也一直很累,生理心理都是。
PHP,大名是HyperText Preprocessor,与ASP,JSP并称为web 3p。但从本身名字来看,ASP和JSP的P,指的都是Pages,因此还是有些特殊的。 先来看一下语法:<?php echo 'This is from php' ?> <p>This is html</p> <?php echo 'We omitted the last closing tag'; 如果php代码是在一个文件最后部分,那它的闭合标签是可以省略的,并且官方提倡在某些情况(some cases)下省略,但这某些情况具体指哪些,不省略又会带来什么问题,就只能等待日后自己发掘了。 官方永远是官方,无论是在政治圈还是IT圈,说的话都是永远一半,不可不信,不可全信。 如同asp,js一样,php也是一种弱类型语言,即是指一个变量可以赋值为字符串,也可以赋值为布尔值。按变量类型来分:
var_dump
输出包含类型的变量具体信息,或者用 is_xxx
函数来判别是否某类型,不提倡使用 gettype
,返回值可能根据php版本的不同而不同。
在js中,我们经常看到这样的写法, if (x) ...
,在php中,假如$x变量未定义的话会抛出一个E_NOTICE级别的错误,因此一般采用 if (empty($x)) ...
或if (is_null($x)) ...。
的写法, is_null
只对null或undefined返回true,相反的函数是 isset
,而 empty
对空字符串,空数组,false,0,0.0和'0'都会返回true。
php支持类型的自动隐式转换,当然可以使用type cast或者 settype
函数显式改变类型。
按变量作用来分:
与变量相对,php也拥有常量定义,有两种定义方式:
与别的语言相比,操作符上大同小异,但也有几个比较特殊的,这里介绍一下:
require和include
之所以特别提到这两个东东,是因为这两个看似函数的东东并不是函数,而归为控制结构,并且使用频率很高。
php的函数
php的类和接口,继承自c++的风格,基本上该有的都有了,可见性(visibility),构造析构函数,静态(static),抽象(abstract),接口(interface),final。
php的引用(reference)是一个非常重要的概念,需要清楚掌握,才能较深刻理解一些代码的含义。首先,要区别引用与指针(pointer)的概念。指针是指向内存地址的变量,如 int *a, *b; int c = 1, d = 2; a = &c; b = &c; *a = 3; // *b = 3, c = 3 a = &d; *a = 4; // *b = 3, c = 3, 这里声明了两个指针a和b,它们都指向c变量所在的内存区域,当给*a赋值时,即改变a所指向内存区域的值,*b和c都变成了3,之后将d变量所在内存区域的地址赋给a,即a指向了d所在内存,这时给*a赋值并不会影响*b和c。
引用是指对同一变量内容取的不同名称,如 $a = 1; $b = &$a; $b = 2; // $a = 2 unset($b);// $a = 2, 这里$b是$a的引用,表示$a和$b只是值为1的变量的不同名称,就像文件的快捷方式,所以改变$b的值,$a的值也随之改变。而unset($b)表示取消了$b这个名称,$a仍是2。
在php中,除了变量引用外还有参数引用和返回值引用,先看代码。 function &t() { return 5; } function t2(&$a) { } function t3() { return 5; } t(); t2(); t2($a = 5); t2(t3());,调用t会报一个notice错误,第一次调用t2时会报Fatal Error,为什么?仔细理解引用的定义,是指向某个变量内容的不同名称,当文件都没有的时候,哪来的快捷方式。 但是,t2的第二次和第三次调用并不像官网说的那样会报错,而是正常执行,不理解为什么会产生这样的情况,我的测试环境是php 5.2.12,哪位同学指点一下。
有一种情况有些特殊,如 好,最后再来看一段代码,作个总结, class A { var $x = 1; } $a = new A; $b = &$a; $c = $a; $a->x = 10; var_dump($b); // object(A)#1 (1) { ["x"]=>int(10) } var_dump($c); // object(A)#1 (1) { ["x"]=>int(10) } $a = array(1); var_dump($b); // array(1) { [0]=>int(1) } var_dump($c); // object(A)#1 (1) { ["x"]=>int(10) } $c = $a; $a[0] = 10; var_dump($b); // array(1) { [0]=>int(10) } var_dump($c); // array(1) { [0]=>int(1) },$b是$a的引用,而$c是$a直接赋值,一开始$a指向A的一个对象,因此赋值给$c的是对象地址,所以第一次改动,$b和$c都会相应变化。 接下来,$a是一个数组,赋值给$c的时候采用了值传递,因此$a的改动不会影响到$c。
|
2022-08-18
2022-08-16
2022-11-06
2022-08-18
2022-08-15
请发表评论