admin 管理员组

文章数量: 887021


2023年12月17日发(作者:在线教学是网课吗)

1. PHP是什么?

答: (Hypertext Preprocessor 超文本预处理器字母缩写)

2. 如何从 PHP 获取系统信息?

答:

3.

$_SERVER 是一个特殊的 PHP 保留变量,它包含了 web 服务器提供的所有信息,被称为超全局变量。

4. 如何从 HTML 中分离之高级分离术?

答:

if ($expression)

?>

This is true.

} else {

?>

This is false.

}

?>

5.

<% 代码 %>

// 短标记仅在通过 配置文件中的指令

// ASP 风格标记仅在通过 配置文件中的指令

short_open_tag 打开后才可用

asp_tags 打开后才可用

也可以使用.

例:

6. 当转换为

boolean 时,以下值被认为是 FALSE.

l

l

l

l

l

l

l

7. 八进制表示数字前必须加上 0(零),十六进制表示数字前必须加上 0x。

8. 如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。

例:

9.

整数值的字长可以用常量PHP_INT_SIZE来表示. 最大值可以用常量PHP_INT_MAX来表示

// 八进制 010 = 十进制 8

the

布尔值 FALSE 自身

the

整型值 0 (零)

the

浮点型值 0.0 (零)

字符串, 以及

字符串 "0"

不包括任何元素的数组

不包括任何成员变量的对象(仅PHP 4.0 适用)

特殊类型

NULL (包括尚未设定的变量)

PDF 文件使用 "pdfFactory Pro" 试用版本创建

10. 如果给定的一个数超出了

integer 的范围,将会被解释为

float。同样如果执行的运算结果超出了

integer 范围,也会返回

float。

11. PHP 中没有整除的运算符。1/2 产生出

float 0.5。可以总是舍弃小数部分,或者使用

round() 函数(四舍五入)。

例: echo round(7/3); //2

12. 决不要将未知的分数强制转换为

integer,这样有时会导致不可预料的结果。

例: echo (int) ( (0.1+0.7) * 10 ); // 显示 7

13. 简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。

例: echo floor((0.1+0.7)*10); //返回 7 而不是预期中的 8

因为该结果内部的表示其实是类似 7.9。这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3。所以不要相信浮点数结果精确到了最后一位,也不要比较两个浮点数是否相等。

4. 什么是定界符(Heredoc Syntax)?

答:在编程过程中难免会遇到用echo来输出大段的html和javascript脚本,如果用传统的输出方法,肯定要有大量的转义符来对字符串中的引号等特殊字符进行转义,不免出现语法错误。

定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;

2.在PHP定界符中的任何特殊字符都不需要转义;

定界符中的PHP变量会被正常的用其值来替换。

PHP中的定界符格式是这样的:

<<

……文本

EOF;

注意:1.在<<<之后的字符是自己定义的,随便什么都是可以的,但是结尾处的字符一定要和他一样

15. 可以用 heredoc语法通过数据传给函数参数.

例: var_dump(array(<<

foobar!

EOD

));

16. 可以用

array() 语言结构来新建一个

array。它接受任意数量用逗号分隔的 键(key) => 值(value) 对。

例: $arr = array("foo" => "bar", 12 => true);

17.

unset() 函数允许删除数组中的某个键。但要注意数组将不会重建索引。

18. 为什么 $foo[bar] 错了?

答: 应该始终在用字符串表示的数组索引上加上引号。例如用 $foo['bar'] 而不是

$foo[bar]。原因是此代码中有一个未定义的常量(bar)而不是字符串('bar'-注意引号),而 PHP 可能会在以后定义此常量,不幸的是你的代码中有同样的名字。它能 // array(1) { [0]=> string(7) "foobar!" }

2.结尾符一定要顶格写!

3.如果在定界符中间出现有PHP的变量,你只需要像在其它字符串中输出一样写就行了

PDF 文件使用 "pdfFactory Pro" 试用版本创建

运行,是因为 PHP 自动将裸字符串(没有引号的字符串且不对应于任何已知符号)转换成一个其值为该裸字符串的正常字符串。如果没有常量定义为 bar,PHP 将把它替代为 'bar' 并使用之。

19. 若使用引用操作符通过引用来拷贝数组。由于指的是同一个数组, 改变任何一方, 值都会改变.

例: $arr = array(1, 2); $brr = &$arr; $brr['1'] = 5;

20. 特殊的NULL值表示一个变量没有值。NULL类型唯一可能的值就是 NULL。

在下列情况下一个变量被认为是 NULL: 1)被赋值为 NULL。 2)尚未被赋值。 3)被print_r($arr); print_r($brr); //Array ( [0] => 1 [1] => 5 ) Array ( [0]

=> 1 [1] => 5 )

unset()。

21. 字符串转换成数字的方法: $foo = 5 + "10 Little Piggies"; //$foo=15

22. 允许的强制转换有: 例: $foo = (int)$bar;

l

l

l

l

l

l

l

l

(int), (integer) - 转换为 整型(integer)

(bool), (boolean) - 转换为 布尔型(boolean)

(float), (double), (real) - 转换为 浮点型(float)

(string) - 转换为 字符串(string)

(binary) - 转换为二进制 字符串(string) (PHP 6)

(array) - 转换为 数组(array)

(object) - 转换为 对象(object)

(unset) - 转换为

NULL (PHP 5)

23. 未初始化的变量具有其类型的默认值 - 布尔类型的变量默认值是 FALSE,整形和符点型变量默认值是零,字符串型变量默认值是空字符串或者数组变量的默认值是空数组。

24. 大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了

include 和 require 引入的文件。例: $a = 1;

include '';//这里变量 $a 将会在包含文件中生效。

25. 任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。

例:$a = 1;

function Test()

{ echo $a; }

//不会有任何输出, 因为echo语句引用了一个局部版本的变量 $a,Test();

26. PHP 中全局变量在函数中使用时必须申明为global.

例: $a = 1;

function Test()

{ global $a;

echo $a; }

Test();

27. 在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义

$GLOBALS 数//输出1

在这个范围内,它没有被赋值。

PDF 文件使用 "pdfFactory Pro" 试用版本创建

组。

例:$a = 1;

28. 静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

例: function grx()

30. 可变变量就是把变量的值当作一个新的变量. 在变量名前再加一个$.

例: $name = 'zkm';

$$name = 'zhukongming';

echo $zkm; //输出zhukonming

31. 在 PHP 的函数和类的方法中,超全局变量不能用作可变变量。

32. 通常PHP不会改变传递给脚本中的变量名。然而应该注意到点(句号)不是 PHP 变量名中的合法字符。$是一个非法变量名. 这时,解析器看到是一个名为

$varname 的变量,后面跟着一个字符串连接运算符,后面跟着一个裸字符串(即没有加引号的字符串,且不匹配任何已知的健名或保留字)'ext'。很明显这不是想要的结果。所以PHP 将会自动将变量名中的点替换成下划线。

{

static $a;

$a++;

echo $a; }

grx(); grx(); //;输出123

function Test()

{ echo $GLOBALS['a'];

//输出1

}

Test();

grx();

29. 静态变量不能在声明的同是对其赋值.

33. 常量默认为大小写敏感。通常常量标识符总是大写的。

34. 常量可以用

define() 函数来定义。php5.3.0后也可以使用const关键字在类定义的外部定义常量。一个常量一旦被定义,就不能再改变或者取消定义。

例: define("CONSTANT", "Hello world.");

const CONSTANT = 'Hello World';

echo CONSTANT; // 输出"Hello world."

35. 常量和(全局)变量在不同的名字空间中。这意味着TRUE 和 $TRUE 是不同的。

36. 常量和变量有如下不同:

l

l

l

l

l

常量前面没有美元符号($);

常量只能用

define() 函数定义,而不能通过赋值语句;

常量可以不用理会变量的作用域而在任何地方定义和访问;

常量一旦定义就不能被重新定义或者取消定义;

常量的值只能是标量。

文件中的当前行号

文件的完整路径和文件名

文件所在的目录

// 输出"Hello world."

echo CONSTANT; 例:

37. 魔术常量: 随着它们在代码中的位置改变而改变。

__LINE__

__FILE__

__ DIR__

PDF 文件使用 "pdfFactory Pro" 试用版本创建

__FUNCTION__

__CLASS__

__METHOD__

__NAMESPACE__

函数名称

类的名称

类的方法名

当前命名空间的名称

38. 三元条件运算符语法: $first ? $second : $third

例:$a = 5;

echo ($a > 3)? 'haha' : 'grx'; //haha

39. 位运算符

$a & $b

$a | $b

$a ^ $b

~ $a

$a << $b

$a >> $b

And

Or

Xor

Not

ShiftL

SR

a和b都为1则为1

a或b为1就为1

a不等于b就是1

0为1,1为0

每移动一次乘2

每移动一次除2

40. 位运算符允许对整型数中指定的位进行置位.如果左右参数都是字符串,则位运算符将操作字符的 ASCII 值.

例:echo "12" ^ "9"; // 输出退格字符(ascii 8)

echo "2" ^ 3; // 输出 1等于 ((int)"2") ^ 3 == 1

41. PHP 支持一个错误控制运算符:@.当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉.它只对表达式有效.

42.运算符优先级

结合方向

非结合

非结合

非结合

非结合

非结合

非结合

运算符

[]

++ --

附加信息

clone和new

array()

递增/减

类型

逻辑操作符

算术运算

算术和字符串

比较

比较

逻辑

逻辑

三元

赋值

逻辑

逻辑

逻辑

多处用到

clone new

~ - (int)(float)等 类型

instanceof

!

* / %

<< >>

+ - .

< <= > >=

== != ==

&

^

|

&&

||

? :

and

xor

or

,

= += -= *= /=

PDF 文件使用 "pdfFactory Pro" 试用版本创建

43. instanceof 用于确定一个 PHP 变量是否属于某一类

class 的实例.

例: class MyClass

{

{

}

}

//输出bool(true)

class NotMyClass

$a = new MyClass;

var_dump($a instanceof MyClass);

var_dump($a instanceof NotMyClass);

例: class ParentClass

{

{

}

}

//输出bool(true)

class MyClass extends ParentClass

$a = new MyClass;

var_dump($a instanceof MyClass);

45. PHP提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch.替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成

endif; ,endwhile; ,endfor; ,endforeach; 以及 endswitch;.

例: for ($i = 1; $i <= 5; $i++):

echo $i. "
";

endfor;

var_dump($a instanceof ParentClass); //输出bool(true)

//输出bool(false)

44. instanceof也可用来确定一个变量是不是继承自某一父类的子类的实例.

46. foreach (array_expression as $value)

47. 通过在 $value 之前加上 & 来修改数组的元素.此方法将以引用赋值而不是拷贝一个值.

例: $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

48. switch语句中的每个case后都要跟一个break. 最后一个用default.

foreach ($arr as &$value):

$value = $value * 2;

endforeach;

print_r($arr); //24681

statement

statement

foreach (array_expression as $key => $value)

49. case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串.

不能用数组或对象.

50. 如果在一个函数中调用 return() 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。如果在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被

include() 的或者

require() 的,则控制交回调用文件。此外,如果当前脚本是被

include() 的,则 return() 的值会被当作

include() 调用的返回值。

51. return() 是语言结构而不是函数,因此其参数没有必要用括号将其括起来。通PDF 文件使用 "pdfFactory Pro" 试用版本创建

常都不用括号,实际上也应该不用,这样可以降低 PHP 的负担。

52. require() 语句包含并运行指定文件。和

include() 几乎完全一样,除了处理失败的方式不同之外。include() 产生一个警告而 require() 则导致一个致命错误.

而include_once()和require_once则是包含过的文件不再包含.

例: require ''; include ('');

53. require和include调用的文件中的变量将替代原文件中的同名变量.

54. 一般情况下函数可以先调用再定义, 除了两个情况外: 条件函数和函数中的函数.

例: $grx = true;

if ($grx)

{

}

foo();

例: function foo()

{

{

function bar()

echo "I don't exist until foo() is called.n"; } }

//如果先调用函数则会出现错误

function foo() {

echo "hahaha"; }

//现在还不能调用bar()函数,因为它还不存在

foo();

bar();

55. 如果希望允许函数修改它的参数值,必须通过引用传递参数.

例: function grx(&$arr) {……}

56. 默认的参数值必须是常量表达式,不能是诸如变量,类成员,或者函数调用等表达式.

57. 任何默认参数必须放在任何非默认参数的右侧.

例: $a = 3;

58. 函数不能返回多个值,但可以通过返回一个数组来得到类似的效果.

例: $arr = array(1, 2, 3, 4);

59. 从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 &.

例: function &returns_reference()

function grx($brr, $x = 3)

{

foreach ($brr as &$value)

$value *= $x;

//输出3, 6, 9, 12

return $brr; }

//错误

function grx($x , $y = 5) function grx($y = 5, $x)

{ echo $x * $y; }

grx($a);

//现在可以调用bar()函数了,因为foo()函数的执行使得bar()函数变为已定义的函数

$crr = grx($arr); print_r($crr);

PDF 文件使用 "pdfFactory Pro" 试用版本创建

{

return $someref; }

$newref =& returns_reference();

60. 可变函数是一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它.

例: function grx()

{ echo 'Haha, my name is zkm';

}

$a = 'grx';

$a();

例: class Foo

{

function Variable()

{ $name = 'Bar';

$this->$name();

function Bar()

{ echo "This is Bar"; }

$foo = new Foo();

$funcname = "Variable";

$foo->$funcname(); // This calls $foo->Variable()

62. 伪变量 $this 可以在当一个方法在对象内部调用时使用.

63. 要创建一个对象的实例,必须创建一个新对象并将其赋给一个变量.

例:$grx = new ClassGrx( );

64. 一个类可以在声明中用 extends 关键字继承另一个类的方法和成员.不能扩展多个类,只能继承一个基类.

65. 把包含所有类的文件声明一遍是很痛苦的一件事, 为了减少这种麻烦可以使用自动加载对象__autoload.

例: function __autoload($classname){

include $classname.".";

$page = new page();

//如果未包含page类声明文件, 侧调用autoload()传入类名称page来包含

84. 如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为final,则不能被继承。

66. 被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了

final 关键字.可以通过

parent:: 来访问被覆盖的方法或成员.

例:class SimpleClass

{

public $var = 'a default value';

public function displayVar()

{ echo $this->var; }

}

class ExtendClass extends SimpleClass

}

}

} // This calls the Bar() method

//输出Haha, my name is zkm

61. 可以利用可变函数的特性来调用一个对象的方法.

PDF 文件使用 "pdfFactory Pro" 试用版本创建

{

function displayVar()

{

}

$extended = new ExtendClass();

$extended->displayVar();

67. 构造函数__construct()就是对类进行初始化..

例: class Grx

}

68. 析构函数__ destruct( )会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行.

69. public(公有) 所定义的类成员可以在任何地方被访问.

$a = new Grx('zhukongming'); // You name is zhukongming

{

function __construct($name)

{ echo 'You name is '. $name; }

//输出Extending class

a default value

echo "Extending classn";

} parent::displayVar();

70. protected(受保护) 所定义的类成员则可以被其所在类的子类和父类访问.

71. private(私有) 定义的类成员则只能被其所在类访问.

72. 构造函数必须是 public如果没有设置这些关键字,则该方法会被设置成默认的

public.

73. 范围解析操作符(::),可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法. 当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字.

例: class Grx

74. 声明类成员或方法为static,就可以不实例化类而直接访问.不能通过一个对象来访问其中的静态成员(静态方法除外).

75. 由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用.

静态属性也可以由对象通过->操作符来访问.

76. 静态属性只能被初始化为一个字符值或一个常量,不能使用表达式. 所以你可以把静态属性初始化为整型或数组,但不能指向另一个变量或函数返回值,也不能指向一个对象.

例: class Grx

{

}

public static $n = 'haha'; //如果缺少static则会报错

{

{

class GGG extends Grx

{

function g()

{ Grx::g(); } }

function g()

echo 'haha'; } }

echo Grx::g(); //haha echo Grx::g();

PDF 文件使用 "pdfFactory Pro" 试用版本创建

echo Grx::$n;

77. 可以在类中定义常量.常量的值将始终保持不变.在定义和使用常量的时候不需要使用$符号.

78. 抽象类不能直接被实例化,你必须先继承该抽象类,然后再实例化子类.抽象类中

至少要包含一个抽象方法.如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现.

79. 继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;另外,这些方法的可见性(如public) 必须和抽象类中一样.

例: abstract class ABS

80. 使用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

我们可以通过interface来定义一个接口,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的所有方法都必须是public,这是接口的特性。

81. PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。我们是通过 魔术方法(magic methods)来实现的。当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。所有的重载方法都必须被声明为public。这些魔术方法的参数都不能

通过引用传递。

{

{

{

}

$a = new AAA();

$a->da();

$b = new BBB();

$b->da();

function da()

{ echo '打球!'; }

function da()

{ echo '打架!'; } }

abstract public function da();}

class AAA extends ABS

class BBB extends ABS

85. 当使用对比操作符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。

而如果使用全等操作符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。

82. 要实现一个接口,可以使用implements操作符。类中必须实现接口中定义的所有方法,否则 会报一个fatal错误。如果要实现多个接口,可以用逗号来分隔多个接口的名称。 实现多个接口时,接口中的方法不能有重名。接口也可以继承,通过使用extends操作符。

例: interface iTemplate{

public function setVariable($name, $var);

public function getHtml($template); }

PDF 文件使用 "pdfFactory Pro" 试用版本创建

class Template implements iTemplate // 实现接口

{

private $vars = array();

public function setVariable($name, $var)

{

{

foreach($this->vars as $name => $value) {

$template = str_replace('{' . $name . '}', $value, $template); }

return $template;

}

}

83. 对象复制可以通过clone关键字来完成.

例: class Grx

{

}

$a = new Grx();

$b = clone $a;

echo $b->name;

public $name = 'zkm';

function x()

{ echo $this->name. 'haha'; }

$this->vars[$name] = $var; }

public function getHtml($template)

PDF 文件使用 "pdfFactory Pro" 试用版本创建


本文标签: 变量 函数 方法 定义 常量