PHP 学习知识汇总,不断更新中!!
自己在学习PHP知识,然后又很多的知识点有待加强,故开此博客分享经验!
其中标有“?”的地方是本人不清楚的地方,还请大家积极帮助博主,被回答的问题将会用“!” 标出,(如果是搜索的话有可能是英文的?!,也有可能是中文的?!哦)博主也会尽自己所能回答大家的问题!!
67.对于抽象和接口这部分功能的理解:首先,抽象和接口都意味着将具有相同特征的事物用统一的描述形式,这样有助于程序的分块。这个有两点好处:首先,有助于对于要操作这类事物的其他事物来说,抽象化可以提供一个统一的接口,这样一来,其他的事物就不用关注这类事物某个具体类的具体实现,因此减小了代码之间的耦合。其次,对于代码开发来说抽象的类提供了一种编程的标准,也可以看做一种框架,在这种框架下有助于代码开发的并行化。
65.关于类的继承和接口的一点想法:
为什么需要定义父类?因为对于外部,对于这一父类下所继承下来的子类都有个统一的接口,因此,外部调用这些功能的时候就不需要了解细节,只需要知道这个接口是怎么实现的就行了
对于内部,统一的父类实现函数,给出了一个函数参考,可以使得函数不用各个子类中再去实现一遍,
总之父类和接口的作用就是“实现统一接口,避免代码冗余”
64.string strip_tags ( string
$str [, string $allowable_tags ] )63.超全局变量 — 超全局变量是在全部作用域中始终可用的内置变
?62.session_start()以后在其他的页面如果没有session_start()能读到session的值吗?/
61.filter组件:php中用来验证数据有效性的一组函数和定义。好像没有对HTML标签过滤的功能。
60.关于类(class)的理解:
在定义类的时候,其实是聚合了一些属性和方法。在类实例化产生对象的时候,其实这个对象只保存了它的属性值(可能额外运行了构造函数),而与其它的同一个类产生的对象拥有同一套的方法,只不过在这些方法中有一个this指针指代特定的对象。
所以,在实例化产生对象时,它占有的空间可能只取决于自己属性的多寡。
还有,任何没有this的函数都可以直接将其作为静态函数。
59.设计本质是要解决耦合性和重用性问题。耦合性问题阻碍并行处理,而重用性问题阻碍代码复用和修改。
58.is_callable() 和 method_exist()的区别。
57.使用get_class_methods()得到一个类中的所有方法列表
56.我们可以使用类的类型提示限制方法的参数类型,但不能用它来确定对象的类型。
使用get_class($instance)返回类字符串。
instanceof 操作符 返回布尔值
?55.什么是命名空间限定条件(namespace qualification)
54.使用字符串来动态地引用类。
53.DIRECTORY_SEPARATOR
52.__autoload()拦截器 :当PHP引擎遇到试图实例化未知类的操作时,会调用__autoload() 方法 (如果已经定义),并将类名当作字符串参数传递给它。
51.包含路径时,可以考虑:1.PHP的核心配置文件 2.服务器的配置文件(如.htaccess)
set_include_path()与 get_include_path()
50.PEAR风格命名方式来模拟包
49.使用文件系统也可以模拟包结构。
48.require 和require_once 都是语句而不是函数,因此可以不使用括号。
?require 会有返回吗
47. require 和include系列函数的区别在于其处理错误的机制不同。在包含库文件等要求正确性较高的场合使用require,在加载模板这样的操作时使用include。
46.?有直接单独使用namespace加大括号的吗。即:
namespace{
...
}
如果有,那他表示什么意思。
45.?如果命名空间中有单独的语句,它表示什么意思呢。是不是use 这个命名空间这些语句就会执行一次。
44. __NAMESPACE__ 变量
43 use 和 use ... as ... 分别对应隐式和显式建立别名。
42.PHP支持嵌套的命名空间:
namespace com\get\util;
?命名空间可以看作是一个树形结构吗
41.5 41的语句一般写在一个文件的首行
41.namespace: 用于创建命名空间。
40.什么是命名空间:命名空间就是一个容器,你可以将类、函数和变量放在其中。在命名空间中你可以无条件地访问这些项。在命名空间之外,必须导入或引用命名空间,才能访问它所包含的项。
39.包:包是一组相关类的集合,这些类以某种方式组合在一起。
命名空间和文件系统都可以看作是一个包的结构。
38.用于组织、测试、操作对象及类的工具和技术:
包(package):将代码按逻辑分类打包;
命名空间:从PHP5.3开始,可以将代码元素封装在独立的单元中;
包含路径:为你的类库代码设置访问路径。
类函数和对象函数:测试对象、类、属性和方法的函数;
反射API(reflection API):一组强大的内置类,可以在代码运行时访问类信息。
37.闭包:使用use来让匿名函数追踪来自其父作用域的变量。
游离态变量。
36.is_callable()函数的智能性。
能够检测数组,将数组的前一个值(对象)作为后一个方法所在的类,进行调用。
35.匿名函数:没有函数名的函数
匿名函数可以被作为返回值返回。
34.抽象类和接口:设计和实现相分离
33.静态方法和属性:通过类而不是对象来访问数据和功能。
错误处理;异常
final类和方法:限制继承
拦截器方法:自动委托
析构方法:对象销毁前的清理工作
克隆对象:创建对象的副本
把对象解析成字符串:创建摘要型方法
回调:用匿名函数为组件添加功能。
错误处理;异常
final类和方法:限制继承
拦截器方法:自动委托
析构方法:对象销毁前的清理工作
克隆对象:创建对象的副本
把对象解析成字符串:创建摘要型方法
回调:用匿名函数为组件添加功能。
!?32.extends继承会继承父类的所有东西吗
不会,当父类中有私有方法或者属性时不会继承。
!?31.php中在没有构建自己的魔术函数__construct时会不会直接继承父类的__construct()函数。
如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。
如子类定义了构造函数 __construct(),子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。
30.self this 和parent的区别和联系
this 是目前实例的引用,也就是说,只有实例才能使用这个变量
self与parent是一个类型的概念,一个是调用类本身,一个是调用父类的方法。
一个例子,如果几个子类都需要使用父类的某个资源,这种资源又可以分为动态的和静态的。静态的诸如一个静态常量(static 量能够变化吗??
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护。类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数。另外说明的是,static的成员,必须使用self来访问,使用this会出错。
)
动态的诸如一个数据库连接。
如果在一个系统中只使用一个数据库连接该如何去弄呢。
28.
PHP String 函数
PHP:指示支持该函数的最早的 PHP 版本。
| 函数 | 描述 | PHP |
|---|---|---|
| addcslashes() | 在指定的字符前添加反斜杠。 | 4 |
| addslashes() | 在指定的预定义字符前添加反斜杠。 | 3 |
| bin2hex() | 把 ASCII 字符的字符串转换为十六进制值。 | 3 |
| chop() | rtrim() 的别名。 | 3 |
| chr() | 从指定的 ASCII 值返回字符。 | 3 |
| chunk_split() | 把字符串分割为一连串更小的部分。 | 3 |
| convert_cyr_string() | 把字符由一种 Cyrillic 字符转换成另一种。 | 3 |
| convert_uudecode() | 对 uuencode 编码的字符串进行解码。 | 5 |
| convert_uuencode() | 使用 uuencode 算法对字符串进行编码。 | 5 |
| count_chars() | 返回字符串所用字符的信息。 | 4 |
| crc32() | 计算一个字符串的 32-bit CRC。 | 4 |
| crypt() | 单向的字符串加密法 (hashing)。 | 3 |
| echo() | 输出字符串。 | 3 |
| explode() | 把字符串打散为数组。 | 3 |
| fprintf() | 把格式化的字符串写到指定的输出流。 | 5 |
| get_html_translation_table() | 返回翻译表。 | 4 |
| hebrev() | 把希伯来文本从右至左的流转换为左至右的流。 | 3 |
| hebrevc() | 同上,同时把(\n) 转为 <br />。 | 3 |
| html_entity_decode() | 把 HTML 实体转换为字符。 | 4 |
| htmlentities() | 把字符转换为 HTML 实体。 | 3 |
| htmlspecialchars_decode() | 把一些预定义的 HTML 实体转换为字符。 | 5 |
| htmlspecialchars() | 把一些预定义的字符转换为 HTML 实体。 | 3 |
| implode() | 把数组元素组合为一个字符串。 | 3 |
| join() | implode() 的别名。 | 3 |
| levenshtein() | 返回两个字符串之间的 Levenshtein 距离。 | 3 |
| localeconv() | 返回包含本地数字及货币信息格式的数组。 | 4 |
| ltrim() | 从字符串左侧删除空格或其他预定义字符。 | 3 |
| md5() | 计算字符串的 MD5 散列。 | 3 |
| md5_file() | 计算文件的 MD5 散列。 | 4 |
| metaphone() | 计算字符串的 metaphone 键。 | 4 |
| money_format() | 把字符串格式化为货币字符串。 | 4 |
| nl_langinfo() | 返回指定的本地信息。 | 4 |
| nl2br() | 在字符串中的每个新行之前插入 HTML 换行符。 | 3 |
| number_format() | 通过千位分组来格式化数字。 | 3 |
| ord() | 返回字符串第一个字符的 ASCII 值。 | 3 |
| parse_str() | 把查询字符串解析到变量中。 | 3 |
| print() | 输出一个或多个字符串。 | 3 |
| printf() | 输出格式化的字符串。 | 3 |
| quoted_printable_decode() | 解码 quoted-printable 字符串。 | 3 |
| quotemeta() | 在字符串中某些预定义的字符前添加反斜杠。 | 3 |
| rtrim() | 从字符串的末端开始删除空白字符或其他预定义字符。 | 3 |
| setlocale() | 设置地区信息(地域信息)。 | 3 |
| sha1() | 计算字符串的 SHA-1 散列。 | 4 |
| sha1_file() | 计算文件的 SHA-1 散列。 | 4 |
| similar_text() | 计算两个字符串的匹配字符的数目。 | 3 |
| soundex() | 计算字符串的 soundex 键。 | 3 |
| sprintf() | 把格式化的字符串写写入一个变量中。 | 3 |
| sscanf() | 根据指定的格式解析来自一个字符串的输入。 | 4 |
| str_ireplace() | 替换字符串中的一些字符。(对大小写不敏感) | 5 |
| str_pad() | 把字符串填充为新的长度。 | 4 |
| str_repeat() | 把字符串重复指定的次数。 | 4 |
| str_replace() | 替换字符串中的一些字符。(对大小写敏感) | 3 |
| str_rot13() | 对字符串执行 ROT13 编码。 | 4 |
| str_shuffle() | 随机地打乱字符串中的所有字符。 | 4 |
| str_split() | 把字符串分割到数组中。 | 5 |
| str_word_count() | 计算字符串中的单词数。 | 4 |
| strcasecmp() | 比较两个字符串。(对大小写不敏感) | 3 |
| strchr() | 搜索字符串在另一字符串中的第一次出现。strstr() 的别名 | 3 |
| strcmp() | 比较两个字符串。(对大小写敏感) | 3 |
| strcoll() | 比较两个字符串(根据本地设置)。 | 4 |
| strcspn() | 返回在找到任何指定的字符之前,在字符串查找的字符数。 | 3 |
| strip_tags() | 剥去 HTML、XML 以及 PHP 的标签。 | 3 |
| stripcslashes() | 删除由 addcslashes() 函数添加的反斜杠。 | 4 |
| stripslashes() | 删除由 addslashes() 函数添加的反斜杠。 | 3 |
| stripos() | 返回字符串在另一字符串中第一次出现的位置(大小写不敏感) | 5 |
| stristr() | 查找字符串在另一字符串中第一次出现的位置(大小写不敏感) | 3 |
| strlen() | 返回字符串的长度。 | 3 |
| strnatcasecmp() | 使用一种“自然”算法来比较两个字符串(对大小写不敏感) | 4 |
| strnatcmp() | 使用一种“自然”算法来比较两个字符串(对大小写敏感) | 4 |
| strncasecmp() | 前 n 个字符的字符串比较(对大小写不敏感)。 | 4 |
| strncmp() | 前 n 个字符的字符串比较(对大小写敏感)。 | 4 |
| strpbrk() | 在字符串中搜索指定字符中的任意一个。 | 5 |
| strpos() | 返回字符串在另一字符串中首次出现的位置(对大小写敏感) | 3 |
| strrchr() | 查找字符串在另一个字符串中最后一次出现的位置。 | 3 |
| strrev() | 反转字符串。 | 3 |
| strripos() | 查找字符串在另一字符串中最后出现的位置(对大小写不敏感) | 5 |
| strrpos() | 查找字符串在另一字符串中最后出现的位置(对大小写敏感) | 3 |
| strspn() | 返回在字符串中包含的特定字符的数目。 | 3 |
| strstr() | 搜索字符串在另一字符串中的首次出现(对大小写敏感) | 3 |
| strtok() | 把字符串分割为更小的字符串。 | 3 |
| strtolower() | 把字符串转换为小写。 | 3 |
| strtoupper() | 把字符串转换为大写。 | 3 |
| strtr() | 转换字符串中特定的字符。 | 3 |
| substr() | 返回字符串的一部分。 | 3 |
| substr_compare() | 从指定的开始长度比较两个字符串。 | 5 |
| substr_count() | 计算子串在字符串中出现的次数。 | 4 |
| substr_replace() | 把字符串的一部分替换为另一个字符串。 | 4 |
| trim() | 从字符串的两端删除空白字符和其他预定义字符。 | 3 |
| ucfirst() | 把字符串中的首字符转换为大写。 | 3 |
| ucwords() | 把字符串中每个单词的首字符转换为大写。 | 3 |
| vfprintf() | 把格式化的字符串写到指定的输出流。 | 5 |
| vprintf() | 输出格式化的字符串。 | 4 |
| vsprintf() | 把格式化字符串写入变量中。 | 4 |
| wordwrap() | 按照指定长度对字符串进行折行处理。 | 4 |
PHP String 常量
PHP:指示支持该常量的最早的 PHP 版本。
| 常量 | 描述 | PHP |
|---|---|---|
| CRYPT_SALT_LENGTH | 包含系统默认加密方法的长度。对于标准 DES 加密,长度是 2。 | |
| CRYPT_STD_DES | 如果支持 2 字符 salt 的 DES 加密,则设置为 1,否则为 0。 | |
| CRYPT_EXT_DES | 如果支持 9 字符 salt 的 DES 加密,则设置为 1,否则为 0。 | |
| CRYPT_MD5 | 如果支持以$1$开始的 12 字符 salt 的MD5加密,则设置为1,否则为0。 | |
| CRYPT_BLOWFISH | 如果支持以 $2$ 或 $2a$ 开始的 16 字符 salt 的 Blowfish 加密,则设置为 1,否则为 0。 | |
| HTML_SPECIALCHARS | ||
| HTML_ENTITIES | ||
| ENT_COMPAT | ||
| ENT_QUOTES | ||
| ENT_NOQUOTES | ||
| CHAR_MAX | ||
| LC_CTYPE | ||
| LC_NUMERIC | ||
| LC_TIME | ||
| LC_COLLATE | ||
| LC_MONETARY | ||
| LC_ALL | ||
| LC_MESSAGES | ||
| STR_PAD_LEFT | ||
| STR_PAD_RIGHT | ||
| STR_PAD_BOTH |
27.array_keys() 函数返回包含数组中所有键名的一个新数组。
compact extract implode
?26.As Artefacto points out in the comments,
$a =& $b is not the same as $a = (&$b).This is because while the
& operator means make a reference out of something, the = operator does assign-by-value, so the expression $a = (&$b) means make a temporary reference to $b, then assign the value of that temporary to $a, which is not assign-by-reference.25.?用php实现css <script async ...>
24.Notes on reference:
A reference is not a pointer. However, an object handle IS a pointer. Example:<?php
class Foo {
private static $used;
private $id;
public function __construct() {
$id = $used++;
}
public function __clone() {
$id = $used++;
}
}
$a = new Foo; // $a is a pointer pointing to Foo object 0
$b = $a; // $b is a pointer pointing to Foo object 0, however, $b is a copy of $a
$c = &$a; // $c and $a are now references of a pointer pointing to Foo object 0
$a = new Foo; // $a and $c are now references of a pointer pointing to Foo object 1, $b is still a pointer pointing to Foo object 0
unset($a); // A reference with reference count 1 is automatically converted back to a value. Now $c is a pointer to Foo object 1
$a = &$b; // $a and $b are now references of a pointer pointing to Foo object 0
$a = NULL; // $a and $b now become a reference to NULL. Foo object 0 can be garbage collected now
unset($b); // $b no longer exists and $a is now NULL
$a = clone $c; // $a is now a pointer to Foo object 2, $c remains a pointer to Foo object 1
unset($c); // Foo object 1 can be garbage collected now.
$c = $a; // $c and $a are pointers pointing to Foo object 2
unset($a); // Foo object 2 is still pointed by $c
$a = &$c; // Foo object 2 has 1 pointers pointing to it only, that pointer has 2 references: $a and $c;
const ABC = TRUE;
if(ABC) {
$a = NULL; // Foo object 2 can be garbage collected now because $a and $c are now a reference to the same NULL value
} else {
unset($a); // Foo object 2 is still pointed to $c
}
23.标志符identifier 引用references A PHP reference is an alias,
22.后期静态绑定
21.类型约束
20.PHP 5 中的对象比较要比 PHP 4 中复杂,所期望的结果更符合一个面向对象语言。
当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。
而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
$copy_of_object = clone $object;
17.PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。我们是通过魔术方法(magic methods)来实现的。
16.PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
15.声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
13.对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。比如,当扩展一个类,子类就会继承父类所有公有的和受保护的方法。
12.自动加载对象
11.可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
10.类的变量成员叫做“属性”,或者叫“字段”、“特征”
9.PHP不支持多重继承,一个类只能继承一个基类。
8.类->对象->实例 引用
4.用户可能注意到了以下的代码功能完全相同:
<?php
$arr = array("one", "two", "three");reset($arr);
while (list(, $value) = each($arr)) {
echo "Value: $value<br>\n";
}
foreach ($arr as $value) {
echo "Value: $value<br />\n";
}
?>
3.语言结构
2.这样写“$b = ($a = 5)”和这样写“$a = 5; $b = 5”(分号标志着语句的结束)是一样的“($a = 5)”的值为5
- 常量前面没有美元符号($);
- 常量只能用 define() 函数定义,而不能通过赋值语句;
- 常量可以不用理会变量的作用域而在任何地方定义和访问;
- 常量一旦定义就不能被重新定义或者取消定义;
- 常量的值只能是标量。
- Example #1 定义常量
- <?php
-
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // 输出 "Constant" 并发出一个提示级别错误信息
?>Example #2 使用关键字 const 定义常量<?php
// 以下代码在 PHP 5.3.0 后可以正常工作
const CONSTANT = 'Hello World';
echo CONSTANT;
?>Note:和使用 define() 来定义常量相反的是,使用 const 关键字定义常量必须处于最顶端的作用区域,因为用此方法是在编译时定义的。这就意味着不能在函数内,循环内以及 if 语句之内用 const 来定义常量。
浙公网安备 33010602011771号