PHP 学习知识汇总,不断更新中!!
自己在学习PHP知识,然后又很多的知识点有待加强,故开此博客分享经验!其中标有“?”的地方是本人不清楚的地方,还请大家积极帮助博主,被回答的问题将会用“!” 标出,(如果是搜索的话有可能是英文的?!,也有可能是中文的?!哦)博主也会尽自己所能回答大家的问题!!
67.对于抽象和接口这部分功能的理解:首先,抽象和接口都意味着将具有相同特征的事物用统一的描述形式,这样有助于程序的分块。这个有两点好处:首先,有助于对于要操作这类事物的其他事物来说,抽象化可以提供一个统一的接口,这样一来,其他的事物就不用关注这类事物某个具体类的具体实现,因此减小了代码之间的耦合。其次,对于代码开发来说抽象的类提供了一种编程的标准,也可以看做一种框架,在这种框架下有助于代码开发的并行化。
66.about register_globalshttp://stackoverflow.com/questions/1417373/why-is-register-globals-so-bad
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来让匿名函数追踪来自其父作用域的变量。
http://bbs.iyunv.com/topics/360002529
游离态变量。
36.is_callable()函数的智能性。
能够检测数组,将数组的前一个值(对象)作为后一个方法所在的类,进行调用。
35.匿名函数:没有函数名的函数
匿名函数可以被作为返回值返回。
34.抽象类和接口:设计和实现相分离
33.静态方法和属性:通过类而不是对象来访问数据和功能。
错误处理;异常
final类和方法:限制继承
拦截器方法:自动委托
析构方法:对象销毁前的清理工作
克隆对象:创建对象的副本
把对象解析成字符串:创建摘要型方法
回调:用匿名函数为组件添加功能。
!?32.extends继承会继承父类的所有东西吗
不会,当父类中有私有方法或者属性时不会继承。
!?31.php中在没有构建自己的魔术函数__construct时会不会直接继承父类的__construct()函数。
如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。
如子类定义了构造函数 __construct(),子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。
30.self this 和parent的区别和联系
this 是目前实例的引用,也就是说,只有实例才能使用这个变量
self与parent是一个类型的概念,一个是调用类本身,一个是调用父类的方法。
一个例子,如果几个子类都需要使用父类的某个资源,这种资源又可以分为动态的和静态的。静态的诸如一个静态常量(static 量能够变化吗??
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护。类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数。另外说明的是,static的成员,必须使用self来访问,使用this会出错。
)
动态的诸如一个数据库连接。
如果在一个系统中只使用一个数据库连接该如何去弄呢。
29.preg_replace — 执行一个正则表达式的搜索和替换 http://php.net/manual/zh/function.preg-replace.php
28.
PHP String 函数
PHP:指示支持该函数的最早的 PHP 版本。
函数描述PHPaddcslashes()在指定的字符前添加反斜杠。4addslashes()在指定的预定义字符前添加反斜杠。3bin2hex()把 ASCII 字符的字符串转换为十六进制值。3chop()rtrim() 的别名。3chr()从指定的 ASCII 值返回字符。3chunk_split()把字符串分割为一连串更小的部分。3convert_cyr_string()把字符由一种 Cyrillic 字符转换成另一种。3convert_uudecode()对 uuencode 编码的字符串进行解码。5convert_uuencode()使用 uuencode 算法对字符串进行编码。5count_chars()返回字符串所用字符的信息。4crc32()计算一个字符串的 32-bit CRC。4crypt()单向的字符串加密法 (hashing)。3echo()输出字符串。3explode()把字符串打散为数组。3fprintf()把格式化的字符串写到指定的输出流。5get_html_translation_table()返回翻译表。4hebrev()把希伯来文本从右至左的流转换为左至右的流。3hebrevc()同上,同时把(\n) 转为 <br />。3html_entity_decode()把 HTML 实体转换为字符。4htmlentities()把字符转换为 HTML 实体。3htmlspecialchars_decode()把一些预定义的 HTML 实体转换为字符。5htmlspecialchars()把一些预定义的字符转换为 HTML 实体。3implode()把数组元素组合为一个字符串。3join()implode() 的别名。3levenshtein()返回两个字符串之间的 Levenshtein 距离。3localeconv()返回包含本地数字及货币信息格式的数组。4ltrim()从字符串左侧删除空格或其他预定义字符。3md5()计算字符串的 MD5 散列。3md5_file()计算文件的 MD5 散列。4metaphone()计算字符串的 metaphone 键。4money_format()把字符串格式化为货币字符串。4nl_langinfo()返回指定的本地信息。4nl2br()在字符串中的每个新行之前插入 HTML 换行符。3number_format()通过千位分组来格式化数字。3ord()返回字符串第一个字符的 ASCII 值。3parse_str()把查询字符串解析到变量中。3print()输出一个或多个字符串。3printf()输出格式化的字符串。3quoted_printable_decode()解码 quoted-printable 字符串。3quotemeta()在字符串中某些预定义的字符前添加反斜杠。3rtrim()从字符串的末端开始删除空白字符或其他预定义字符。3setlocale()设置地区信息(地域信息)。3sha1()计算字符串的 SHA-1 散列。4sha1_file()计算文件的 SHA-1 散列。4similar_text()计算两个字符串的匹配字符的数目。3soundex()计算字符串的 soundex 键。3sprintf()把格式化的字符串写写入一个变量中。3sscanf()根据指定的格式解析来自一个字符串的输入。4str_ireplace()替换字符串中的一些字符。(对大小写不敏感)5str_pad()把字符串填充为新的长度。4str_repeat()把字符串重复指定的次数。4str_replace()替换字符串中的一些字符。(对大小写敏感)3str_rot13()对字符串执行 ROT13 编码。4str_shuffle()随机地打乱字符串中的所有字符。4str_split()把字符串分割到数组中。5str_word_count()计算字符串中的单词数。4strcasecmp()比较两个字符串。(对大小写不敏感)3strchr()搜索字符串在另一字符串中的第一次出现。strstr() 的别名3strcmp()比较两个字符串。(对大小写敏感)3strcoll()比较两个字符串(根据本地设置)。4strcspn()返回在找到任何指定的字符之前,在字符串查找的字符数。3strip_tags()剥去 HTML、XML 以及 PHP 的标签。3stripcslashes()删除由 addcslashes() 函数添加的反斜杠。4stripslashes()删除由 addslashes() 函数添加的反斜杠。3stripos()返回字符串在另一字符串中第一次出现的位置(大小写不敏感)5stristr()查找字符串在另一字符串中第一次出现的位置(大小写不敏感)3strlen()返回字符串的长度。3strnatcasecmp()使用一种“自然”算法来比较两个字符串(对大小写不敏感)4strnatcmp()使用一种“自然”算法来比较两个字符串(对大小写敏感)4strncasecmp()前 n 个字符的字符串比较(对大小写不敏感)。4strncmp()前 n 个字符的字符串比较(对大小写敏感)。4strpbrk()在字符串中搜索指定字符中的任意一个。5strpos()返回字符串在另一字符串中首次出现的位置(对大小写敏感)3strrchr()查找字符串在另一个字符串中最后一次出现的位置。3strrev()反转字符串。3strripos()查找字符串在另一字符串中最后出现的位置(对大小写不敏感)5strrpos()查找字符串在另一字符串中最后出现的位置(对大小写敏感)3strspn()返回在字符串中包含的特定字符的数目。3strstr()搜索字符串在另一字符串中的首次出现(对大小写敏感)3strtok()把字符串分割为更小的字符串。3strtolower()把字符串转换为小写。3strtoupper()把字符串转换为大写。3strtr()转换字符串中特定的字符。3substr()返回字符串的一部分。3substr_compare()从指定的开始长度比较两个字符串。5substr_count()计算子串在字符串中出现的次数。4substr_replace()把字符串的一部分替换为另一个字符串。4trim()从字符串的两端删除空白字符和其他预定义字符。3ucfirst()把字符串中的首字符转换为大写。3ucwords()把字符串中每个单词的首字符转换为大写。3vfprintf()把格式化的字符串写到指定的输出流。5vprintf()输出格式化的字符串。4vsprintf()把格式化字符串写入变量中。4wordwrap()按照指定长度对字符串进行折行处理。4
PHP String 常量
PHP:指示支持该常量的最早的 PHP 版本。
常量描述PHPCRYPT_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 引用referencesA PHP reference is an alias,
22.后期静态绑定
21.类型约束
20.PHP 5 中的对象比较要比 PHP 4 中复杂,所期望的结果更符合一个面向对象语言。 当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。
而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
19.对象复制可以通过 clone 关键字来完成(如果可能,这将调用对象的 __clone() 方法)。对象中的 __clone() 方法不能被直接调用。
$copy_of_object = clone $object;
18.PHP 5 提供了一种定义对象的方法使其可以通过单元列表来遍历,例如用 foreach 语句。默认情况下,所有可见属性都将被用于遍历。
17.PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。我们是通过魔术方法(magic methods)来实现的。
16.PHP 5 支持抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
15.声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
14.本页说明了用 static 关键字来定义静态方法和属性。static 也可用于定义静态变量以及后期静态绑定。参见上述页面了解 static 在其中的用法。
13.对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。比如,当扩展一个类,子类就会继承父类所有公有的和受保护的方法。
12.自动加载对象
11.可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
10.类的变量成员叫做“属性”,或者叫“字段”、“特征”
9.PHP不支持多重继承,一个类只能继承一个基类。
8.类->对象->实例引用
7.当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用(通常是该方法所从属的对象,但如果是从第二个对象静态调用时也可能是另一个对象)。
6.http://www.php.net/manual/zh/reserved.php保留字
5.PHP 5 中的新特性包括访问控制,抽象类和 final 类与方法,附加的魔术方法,接口,对象复制和类型约束。
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
1.常量和变量有如下不同:http://www.php.net/manual/zh/language.constants.syntax.php
[*]常量前面没有美元符号($);
[*]常量只能用 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 来定义常量。
页:
[1]