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" 试用版本创建
";
版权声明:本文标题:php原手册pdf 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1702794421h431189.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论