为了账号安全,请及时绑定邮箱和手机立即绑定

PHP进阶篇

Jason PHP开发工程师
难度初级
时长 9小时28分
学习人数
综合评分8.90
570人评价 查看评价
9.3 内容实用
8.8 简洁易懂
8.6 逻辑清晰
  • 值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数

    查看全部
  • 对象声明时需要声明对象属性和方法的可见性

    • public: 公开可见

    • protected: 对象内部可见 (该对象的子对象同样可以访问)

    protected $name =“object”; //必须使用getName方法才能得到$name属性的值

    • private: 对象自身内部可见 (不包含该对象的子对象,或者说private属性和方法不会被继承)


    查看全部
  • PHP正则表达式语法汇总


    用好正则表达式往往会起到事半功倍的效果,以下是对PHP正则表达式的语法汇总和详细介绍,需要的朋友可以过来参考下。


    首先,让我们看看两个特别的字符:'^' 和 ‘$' 他们是分别用来匹配字符串的开始和结束,一下分别举例说明


    "^The": 匹配以 "The"开头的字符串;

    "of despair$": 匹配以 "of despair" 结尾的字符串;

    "^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配

    "notice": 匹配包含notice的字符串


    你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边

    这里还有几个字符 '*', '+',和 '?', 他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:"zero or more", "one or more", and "zero or one." 这里是一些例子:


    "ab*": 匹配字符串a和0个或者更多b组成的字符串("a", "ab", "abbb", etc.);

    "ab+": 和上面一样,但最少有一个b ("ab", "abbb", etc.);

    "ab?":匹配0个或者一个b;

    "a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的字符串.


    你也可以在大括号里面限制字符出现的个数,比如


    "ab{2}": 匹配一个a后面跟两个b(一个也不能少)("abb";

    "ab{2,}": 最少更两个b("abb", "abbbb", etc.);

    "ab{3,5}": 3-5个b("abbb", "abbbb", or "abbbbb".


    你还要注意到你必须总是指定 (i.e, "{0,2}", not "{,2}".同样,你必须注意到, '*', '+', 和'?' 分别和一下三个范围标注是一样的,"{0,}", "{1,}", 和 "{0,1}"。


    现在把一定数量的字符放到小括号里,比如:


    "a(bc)*": 匹配 a 后面跟0个或者一个"bc";

    "a(bc){1,5}": 一个到5个 "bc."


    还有一个字符 '│', 相当于OR 操作:


    "hi│hello": 匹配含有"hi" 或者 "hello" 的 字符串;

    "(b│cd)ef": 匹配含有 "bef" 或者 "cdef"的字符串;

    "(a│b)*c": 匹配含有这样 - 多个(包括0个)a或b,后面跟一个c

    的字符串 的字符串;


    一个点('.')可以代表所有的 单一字符:


    "a.[0-9]": 一个a跟一个字符再跟一个数字的 (含有这样一个字符串的字符串将被匹配,以后省略此括号)

    "^.{3}$": 以三个字符结尾 .


    中括号括住的内容只匹配一个 单一的字符


    "[ab]": 匹配单个的 a 或者 b ( 和 "a│b" 一样);

    "[a-d]": 匹配'a' 到'd'的单个字符 (和"a│b│c│d" 还有 "[abcd]"效果一样);

    "^[a-zA-Z]": 匹配以字母开头的字符串

    "[0-9]%": 匹配含有 形如 x% 的字符串

    ",[a-zA-Z0-9]$": 匹配以逗号在加一个数字或字母结尾的字符串



    你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^' 作为开头 (i.e., "%[^a-zA-Z]%" 匹配含有 两个百分号里面有一个非字母 的字符串).


    为了能够解释,但"^.[$()│*+?{/"作为有特殊意义的字符的时候,你必须在这些字符面前加'', 还有在php3中你应该避免在模式的最前面使用/, 比如说,正则表达式 "(/$│?[0-9]+" 应该这样调用 ereg("(//$│?[0-9]+", $str) (不知道php4是不是一样)


    不要忘记在中括号里面的字符是这条规路的例外—在中括号里面, 所有的特殊字符,包括(''), 都将失去他们的特殊性质(i.e., "[*/+?{}.]"匹配含有这些字符的字符串). 还有,正如regx的手册告诉我们: "如果列表里含有 ']', 最好把它作为列表里的第一个字符(可能跟在'^'后面). 如果含有'-', 最好把它放在最前面或者最后面, or 或者一个范围的第二个结束点(i.e. [a-d-0-9]中间的‘-'将有效.


    为了完整, 我应该涉及到 collating sequences, character classes, 同埋 equivalence classes. 但我在这些方面不想讲的太详细, 这些在下面的文章仲都不需要涉及到. 你们可以在regex man pages 那里得到更多消息.


    如何构建一个模式来匹配 货币数量 的输入


    好了,现在我们要用我们所学的来干一些有用的事:构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式: "10000.00" 和 "10,000.00",或者没有小数部分, "10000" and "10,000". 现在让我们开始构建这个匹配模式:


    ^[1-9][0-9]*$


    这是所变量必须以非0的数字开头.但这也意味着 单一的 "0" 也不能通过测试. 以下是解决的方法:


    ^(0│[1-9][0-9]*)$


    "只有0和不以0开头的数字与之匹配",我们也可以允许一个负号再数字之前:


    ^(0│-?[1-9][0-9]*)$


    这就是: "0 或者 一个以0开头可能有一个负号在前面的数字." 好了, 好了现在让我们别那么严谨,允许以0开头.现在让我们放弃 负号 , 因为我们在表示钱币的时候并不需要用到. 我们现在指定 模式 用来匹配小数部分:


    ^[0-9]+(/.[0-9]+)?$


    这暗示匹配的字符串必须最少以一个阿拉伯数字开头. 但是注意,在上面模式中 "10." 是不匹配的, 只有 "10" 和 "10.2" 才可以. (你知道为什么吗)


    ^[0-9]+(/.[0-9]{2})?$


    我们上面指定小数点后面必须有两位小数.如果你认为这样太苛刻,你可以改成:


    ^[0-9]+(/.[0-9]{1,2})?$


    这将允许小数点后面有一到两个字符. 现在我们加上用来增加可读性的逗号(每隔三位), 我们可以这样表示:


    ^[0-9]{1,3}(,[0-9]{3})*(/.[0-9]{1,2})?$


    不要忘记加号 '+' 可以被乘号 '*' 替代如果你想允许空白字符串被输入话 (为什么?). 也不要忘记反斜杆 '/' 在php字符串中可能会出现错误 (很普遍的错误). 现在,我们已经可以确认字符串了, 我们现在把所有逗号都去掉 str_replace(",", "", $money) 然后在把类型看成 double然后我们就可以通过他做数学计算了.

    构造检查email的正则表达式


    好,让我们继续讨论怎么验证一个email地址. 在一个完整的email地址中有三个部分: POP3 用户名 (在 '@' 左边的一切), '@', 服务器名(就是剩下那部分). 用户名可以含有大小写字母阿拉伯数字,句号 ('.'), 减号('-'), and 下划线 ('_'). 服务器名字也是符合这个规则,当然下划线除外.


    现在, 用户名的开始和结束都不能是句点. 服务器也是这样. 还有你不能有两个连续的句点他们之间至少存在一个字符,好现在我们来看一下怎么为用户名写一个匹配模式:


    ^[_a-zA-Z0-9-]+$


    现在还不能允许句号的存在. 我们把它加上:


    ^[_a-zA-Z0-9-]+(/.[_a-zA-Z0-9-]+)*$


    上面的意思就是说: "以至少一个规范字符(除.意外)开头,后面跟着0个或者多个以点开始的字符串."


    简单化一点, 我们可以用 eregi()取代 ereg().eregi()对大小写不敏感, 我们就不需要指定两个范围 "a-z" 和 "A-Z" – 只需要指定一个就可以了:


    ^[_a-z0-9-]+(/.[_a-z0-9-]+)*$


    后面的服务器名字也是一样,但要去掉下划线:


    ^[a-z0-9-]+(/.[a-z0-9-]+)*$


    Done. 现在只需要用”@”把两部分连接:


    ^[_a-z0-9-]+(/.[_a-z0-9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*$



    这就是完整的email认证匹配模式了,只需要调用


    eregi(‘^[_a-z0-9-]+(/.[_a-z0-9-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*$ ',$eamil)


    就可以得到是否为email了

    正则表达式的其他用法


    提取字符串


    ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册). 比如说,我们想从 path/URL 提取文件名 – 下面的代码就是你需要:


    ereg("([^///]*)$", $pathOrUrl, $regs);

    echo $regs[1];


    高级的代换


    ereg_replace() 和 eregi_replace()也是非常有用的: 假如我们想把所有的间隔负号都替换成逗号:


    ereg_replace("[ /n/r/t]+", ",", trim($str));  


    PHP被大量的应用于Web的后台CGI开发,通常是在用户数据数据之后得出某种结果,但是如果用户输入的数据不正确,就会出现问题,比如说某人的生日是"2月30日"!那应该怎么样来检验暑假是否正确呢? 在PHP中加入了正则表达式的支持,让我们可以十分方便的进行数据匹配。


    2 什么是正则表达式:


    简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言。此外,JavaScript这种客户端的脚本语言也提供了对正则表达式的支持,现在正则表达式已经成为了一个通用的概念和工具,被各类技术人员所广泛使用。


    在某个Linux网站上面有这样的话:"如果你问一下Linux爱好者最喜欢什么,他可能会回答正则表达式;如果你问他最害怕什么,除了繁琐的安装配置外他肯定会说正则表达式。"


    正如上面说的,正则表达式看起来非常复杂,让人害怕,济南网站建设 http://www.geilijz.com要告诉大家的是大多数的PHP初学者都会跳过这里,继续下面的学习,但是PHP中的正则表达式有着可以利用模式匹配找到符合条件的字符串、判断字符串是否合乎条件或者用指定的字符串来替代符合条件的字符串等强大的功能,不学实在太可惜了……


    3 正则表达式的基本语法:


    一个正则表达式,分为三个部分:分隔符,表达式和修饰符。


    分隔符可以是除了特殊字符以外的任何字符(比如"/ !"等等),常用的分隔符是"/"。表达式由一些特殊字符(特殊字符详见下面)和非特殊的字符串组成,比如"[a-z0-9_-]+@[a-z0-9_-.]+"可以匹配一个简单的电子邮件字符串。修饰符是用来开启或者关闭某种功能/模式。下面就是一个完整的正则表达式的例子:


    /hello.+?hello/is


    上面的正则表达式"/"就是分隔符,两个"/"之间的就是表达式,第二个"/"后面的字符串"is"就是修饰符。


    在表达式中如果含有分隔符,那么就需要使用转义符号"/",比如"/hello.+?//hello/is"。转义符号除了用于分隔符外还可以执行特殊字符,全部由字母构成的特殊字符都需要"/"来转义,比如"/d"代表全体数字。



    4 正则表达式的特殊字符:


    正则表达式中的特殊字符分为元字符、定位字符等等。


    元字符是正则表达式中一类有特殊意义的字符,用来描述其前导字符(即元字符前面的字符)在被匹配的对象中出现的方式。元字符本身是一个个单一的字符,但是不同或者相同的元字符组合起来可以构成大的元字符。


    元字符:


    大括号:大括号用来精确指定匹配元字符出现的次数,例如"/pre{1,5}/"表示匹配的对象可以是"pre"、"pree"、"preeeee"这样在"pr"后面出现1个到5个"e"的字符串。或者"/pre{,5}/"代表pre出现0此到5次之间。


    加号:"+"字符用来匹配元字符前的字符出现一次或者多次。例如"/ac+/"表示被匹配的对象可以是"act"、"account"、"acccc"等在"a"后面出现一个或者多个"c"的字符串。"+"相当于"{1,}"。


    星号:"*"字符用来匹配元字符前的字符出现零次或者多次。例如"/ac*/"表示被匹配的对象可以是"app"、"acp"、"accp"等在"a"后面出现零个或者多个"c"的字符串。"*"相当于"{0,}"。


    问号:"?"字符用来匹配元字符前的字符出现零次或者1次。例如"/ac?/"表示匹配的对象可以是"a"、"acp"、"acwp"这样在"a"后面出现零个或者1个"c"的字符串。"?"在正则表达式中还有一个非常重要的作用,即"贪婪模式"。


    还有两个很重要的特殊字符就是"[ ]"。他们可以匹配"[]"之中出现过的字符,比如"/[az]/"可以匹配单个字符"a"或者"z";如果把上面的表达式改成这样"/[a-z]/",就可以匹配任何单个小写字母,比如"a"、"b"等等。


    如果在"[]"中出现了"^",代表本表达式不匹配"[]"内出现的字符,比如"/[^a-z]/"不匹配任何小写字母!并且正则表达式给出了几种"[]"的默认值:


    [:alpha:]:匹配任何字母

    [:alnum:]:匹配任何字母和数字

    [:digit:]:匹配任何数字

    [:space:]:匹配空格符

    [:upper:]:匹配任何大写字母

    [:lower:]:匹配任何小写字母

    [:punct:]:匹配任何标点符号

    [digit:]:匹配任何16进制数字


    另外下面这些特殊字符在转义符号"/"转义后代表的含义如下:


    s:匹配单个的空格符

    S:用于匹配除单个空格符之外的所有字符。

    d:用于匹配从0到9的数字,相当于"/[0-9]/"。

    w:用于匹配字母,数字或下划线字符,相当于"/[a-zA-Z0-9_]/"。

    W:用于匹配所有与w不匹配的字符,相当于"/[^a-zA-Z0-9_]/"。

    D:用于匹配任何非10进制的数字字符。

    .:用于匹配除换行符之外的所有字符,如果经过修饰符"s"的修饰,"."可以代表任意字符。


    利用上面的特殊字符可以很方便的表达一些比较繁琐的模式匹配。例如"//d0000/"利用上面的正则表达式可以匹配万以上,十万一下的整数字符串。


    定位字符:


    定位字符是正则表达式中又一类非常重要的字符,它的主要作用是用于对字符在匹配对象中的位置进行描述。


    ^:表示匹配的模式出现在匹配对象的开头(和在"[]"里面不同)


    $:表示匹配的模式出现在匹配对象的末尾


    空格:表示匹配的模式出现在开始和结尾的两个边界之一


    "/^he/":可以匹配以"he"字符开头的字符串,比如hello、height等等;


    "/he$/":可以匹配以"he"字符结尾的字符串即she等;


    "/ he/":空格开头,和^的作用一样,匹配以he开头的字符串;


    "/he /":空格结束,和$的作用一样,匹配以he结尾的字符串;


    "/^he$/":表示只和字符串"he"匹配。


    括号:


    正则表达式除了可以用户匹配,还可以用括号"()"来记录需要的信息,储存起来,给后面的表达式读取。比如:


    /^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)(.[a-zA-Z0-9_-])$/


    就是记录邮件地址的用户名,和邮件地址的服务器地址(形式为service@geilijz.com之类的),在后面如果想要读取记录下来的字符串,只是需要用"转义符+记录的次序"来读取。比如"/1"就相当于第一个"[a-zA-Z0-9_-]+","/2"相当于第二个([a-zA-Z0-9_-]+),"/3"就是第三个(.[a-zA-Z0-9_-])。但是在PHP中,"/"是一个特殊的字符,需要转义,所以""到了PHP的表达式中就应该写成"//1"。


    其他特殊符号:

    "|":或符号"|"和PHP里面的或一样,不过是一个"|",而不是PHP的两个"||"!意思就是可以是某个字符或者另一个字符串,比如"/abcd|dcba/"可能匹配"abcd"或者"dcba"。



    5 贪婪模式:


    前面在元字符中提到过"?"还有一个重要的作用,即"贪婪模式",什么是"贪婪模式"呢?


    比如我们要匹配以字母"a"开头字母"b"结尾的字符串,但是需要匹配的字符串在"a"后面含有很多个"b",比如"a bbbbbbbbbbbbbbbbb",那正则表达式是会匹配第一个"b"还是最后一个"b"呢?如果你使用了贪婪模式,那么会匹配到最后一个"b",反之只是匹配到第一个"b"。


    使用贪婪模式的表达式如下:

    /a.+?b/

    /a.+b/U

    不使用贪婪模式的如下:

    /a.+b/

    上面使用了一个修饰符U,详见下面的部分。


    6 修饰符:

    在正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这意味着"e"并不等于"E")。正则表达式里面的修饰符如下:


    i :如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的。


    m:默认的正则开始"^"和结束"$"只是对于正则字符串如果在修饰符中加上"m",那么开始和结束将会指字符串的每一行:每一行的开头就是"^",结尾就是"$"。


    s:如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!


    x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。


    e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。


    A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说"/a/A"匹配"abcd"。


    E:与"m"相反,如果使用这个修饰符,那么"$"将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。


    U:和问号的作用差不多,用于设置"贪婪模式"。


    7 PCRE相关的正则表达式函数:

    PHP的Perl兼容正则表达式提供的多个函数,分为模式匹配,替换和匹配数目等等:


    1、preg_match :

    函数格式:int preg_match(string pattern, string subject, array [matches]);

    这个函数会在string中使用pattern表达式来匹配,如果给定了[regs],就会将string记录到[regs][0]中,[regs][1]代表使用括号"()"记录下来的第一个字符串,[regs][2]代表记录下来的第二个字符串,以此类推。preg如果在string中找到了匹配的pattern,就会返回"true",否则返回"false"。


    2、preg_replace :

    函数格式:mixed preg_replace(mixed pattern, mixed replacement, mixed subject);

    这个函数会使用将string中符合表达式pattern的字符串全部替换为表达式replacement。如果replacement中需要包含pattern的部分字符,则可以使用"()"来记录,在replacement中只是需要用"/1"来读取。


    3、preg_split :

    函数格式:array preg_split(string pattern, string subject, int [limit]);

    这个函数和函数split一样,区别仅在与split可以使用简单正则表达式来分割匹配的字符串,而preg_split使用完全的Perl兼容正则表达式。第三个参数limit代表允许返回多少个符合条件的值。


    4、preg_grep :

    函数格式:array preg_grep(string patern , array input);

    这个函数和preg_match功能基本上,不过preg_grep可以将给定的数组input中的所有元素匹配,返回一个新的数组。


    下面举一个例子,比如我们要检查Email地址的格式是否正确:



    复制代码 代码如下:

    <?php

    function emailIsRight($email) {

    if (preg_match("^[_/.0-9a-z-]+@([0-9a-z][0-9a-z-]+/.)+[a-z]{2,3}$",$email)) {

    return 1;

    }

    return 0;

    }

    if(emailIsRight('y10k@963.net')) echo '正确<br>';

    if(!emailIsRight('y10k@fffff')) echo '不正确<br>';

    ?>  


    上面的程序会输出"正确<br>不正确"。


    8.PHP中的Perl兼容正则表达式和Perl/Ereg正则表达式的区别:


    虽然叫做“Perl兼容正则表达式”,但是和Perl的正则表达式相比,PHP的还是由一些不同,比如修饰符“G”在Perl里面代表全部匹配,但是在PHP中没有加入对这个修饰符的支持。


    还有就是和ereg系列函数的区别,ereg也是PHP中提供的正则表达式函数,不过和preg相比,要弱上很多。


    1、ereg里面是不需要也不能使用分隔符和修饰符的,所以ereg的功能比preg要弱上不少。


    2、关于".":点在正则里面一般是除了换行符以外的全部字符,但是在ereg里面的"."是任意字符,即包括换行符!如果在preg里面希望"."能够包括换行符,可以在修饰符中加上"s"。


    3、ereg默认使用贪婪模式,并且不能修改,这个给很多替换和匹配带来麻烦。


    4、速度:这个或许是很多人关心的问题,会不会preg功能强大是以速度来换取的?不用担心,preg的速度要远远比ereg快,笔者做了一个程序测试:


    time test:


    PHP代码:



    复制代码 代码如下:

    <?php

    echo "reg_replace used time:";

    $start = time();

    for($i=1;$i<=100000;$i++) {

    $str = "ssssssssssssssssssssssssssss";

    preg_replace("/s/","",$str);

    }

    $ended = time()-$start;

    echo $ended;

    echo "

    ereg_replace used time:";

    $start = time();

    for($i=1;$i<=100000;$i++) {

    $str = "ssssssssssssssssssssssssssss";

    ereg_replace("s","",$str);

    }

    $ended = time()-$start;

    echo $ended;

    echo "

    str_replace used time:";

    $start = time();

    for($i=1;$i<=100000;$i++) {

    $str = "sssssssssssssssssssssssssssss";

    str_replace("s","",$str);

    }

    $ended = time()-$start;

    echo $ended;

    ?>


    结果:

    Preg_replace used time:5

    ereg_replace used time:15

    str_replace used time:2


    str_replace因为不需要匹配所以速度非常快,而preg_replace的速度比ereg_replace要快上不少。


    9.关于PHP3.0对于preg的支持:

    在PHP 4.0中默认加入了preg支持,但是在3.0中确没有。如果在3.0中希望使用preg函数,必须加载php3_pcre.dll文件,只要在php.ini的extension部分设置加入"extension = php3_pcre.dll"然后从新启动PHP就可以了!


    其实正则表达式还常用于UbbCode的实现,很多PHP论坛都使用了这个方法,但是具体的代码比较长。


    查看全部
  • PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个:

    name( Cookie名)可以通过$_COOKIE['name'] 进行访问
    value(Cookie的值)
    expire(过期时间)Unix时间戳格式,默认为0,表示浏览器关闭即失效
    path(有效路径)如果路径设置为'/',则整个网站都有效
    domain(有效域)默认整个域名都有效,如果设置了'www.imooc.com',则只在www子域中有效


    查看全部
    0 采集 收起 来源:设置cookie

    2018-07-03

  • Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据。

    查看全部
    0 采集 收起 来源:cookie简介

    2018-07-03

  • 对象继承:extends

    父类运行后沿用 parent::



    查看全部
  • 正则表达式中具有特殊含义的字符称之为元字符,常用的元字符有:

    \ 一般用于转义字符
    ^ 断言目标的开始位置(或在多行模式下是行首)
    $ 断言目标的结束位置(或在多行模式下是行尾)
    . 匹配除换行符外的任何字符(默认)
    [ 开始字符类定义
    ] 结束字符类定义
    | 开始一个可选分支
    ( 子组的开始标记
    ) 子组的结束标记
    ? 作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性。 (查阅量词)
    * 量词,0 次或多次匹配
    + 量词,1 次或多次匹配
    { 自定义量词开始标记
    } 自定义量词结束标记

    元字符具有两种使用场景,一种是可以在任何地方都能使用,另一种是只能在方括号内使用,在方括号内使用的有:

    \ 转义字符
    ^ 仅在作为第一个字符(方括号内)时,表明字符类取反
    - 标记字符范围

    其中^在反括号外面,表示断言目标的开始位置,但在方括号内部则代表字符类取反,方括号内的减号-可以标记字符范围,例如0-9表示0到9之间的所有数字。


    查看全部
    0 采集 收起 来源:元字符与转义

    2018-07-02

  • preg_match只能匹配一次结果,但很多时候我们需要匹配所有的结果,preg_match_all可以循环获取一个列表的匹配结果数组。

    查看全部
  • 我一直觉得try catch 抛出异常这个没什么用,可能还没遇到过需要用的时候吧

    查看全部
  • isset是php的内部函数,作为检测用

    查看全部

  • extends继承:

    class Car(){}

    class Truck extends Car{}

    查看全部
  • $result = mysql_query($sql);
    print_r(mysql_fetch_array($result));
    
    $result = mysql_query($sql);
    print_r(mysql_fetch_row($result));
    
    $result = mysql_query($sql);
    print_r(mysql_fetch_assoc($result));


    Array
    (
        [0] => 1
        [id] => 1
        [1] => 李四
        [name] => 李四
        [2] => 18
        [age] => 18
        [3] => 高三一班
        [class] => 高三一班
        [4] => 0
        [status] => 0
        [5] => 2018-06-16 10:54:10
        [create_time] => 2018-06-16 10:54:10
    )
    Array
    (
        [0] => 1
        [1] => 李四
        [2] => 18
        [3] => 高三一班
        [4] => 0
        [5] => 2018-06-16 10:54:10
    )
    Array
    (
        [id] => 1
        [name] => 李四
        [age] => 18
        [class] => 高三一班
        [status] => 0
        [create_time] => 2018-06-16 10:54:10
    )



    查看全部
  • cookie 和 session 总结:

    cookie 和 session 都属于 http header, 要放在网页输出(!doctype...)的最前面


    cookie:

    setcookie($name, $value, $exprie, $path, $domain)  // 都是字符串, 自动为值进行 URL 编码
    setrawcookie($name, rawurlencode($value)); // 手动对值进行 URL 编码
    
    $_COOKIE['name']; // 读取cookie值
    setcookie($name, time()-1); // 删除cookie, 使cookie 过期


    session:

    session_start();
    $_SESSION['name'] = 'value';  // 设置 session
    
    $_SESSION['name'];  // 读取 session 中的值
    session_id(); // 获取session_id
    session_destroy(); // 清空session中的值,保留 session_id
    unset($_SESSION); // 立刻清空 session


    其他函数:

    rawurlencode($str);
    rawurldecode($str);
    
    base64_encode($str);
    base64_decode($str);
    
    md5($str);
    
    serialize($array); // 将对象序列化为字符串
    
    
    unserialize($obj); // 将字符串反序列化为对象




    查看全部
  • 件系统总结

    判断函数:

    file_exists($file);
    is_file($file);
    is_writable($file);
    is_readable($file);


    获取文信息的函数:

    fileowner($file); 
    filectime($file);  // 创建时间
    filemtime($file); // 最后修改时间
    fileatime($file);  // 访问时间
    echo date('Y-m-d H:i:s', filemtime($file));
    date('Y-m-d H:i:s', time());
    
    getsize($file); // bytes


    读写函数:

    文本文件

    file_get_contents($file);  // 读取整个文件
    file_put_contents($file, 'hello');

    任何文件

    $fp = fopen($file, 'r');
    while(!feof($fp)){
        echo fgets($fp);  // 每次读取一行
    }
    fclose($fp);

    删除文件

    unlink($file);
    rmdir($empty_dir);

    遍历目录:

    foreach (glob('*') as $filename){
        ....
    }


    查看全部
  • 正则表达式总结:

    相关函数:

    preg_match($pattern, $subject [, $matches])  -> 返回匹配到的次数 0 或 1;匹配1次后退出

    $pattern: 正则表达式

    $subject: 要处理的字符串

    $match: 保存匹配结果的数组

    <?php
    $str = 'hello world';
    $p = '/(\w+) (\w+)/';
    echo preg_match($p, $str, $matches).PHP_EOL;
    var_dump($matches);
    
    // 1
    // array(3) {
    //  [0]=>
    //  string(11) "hello world"
    //  [1]=>
    //  string(5) "hello"
    //  [2]=>
    //  string(5) "world"
    // }

    preg_match_all($pattern, $subject, $match)  -> 返回匹配到的次数;

    <?php
    $str = 'hello world';
    $p = '/\w+/';
    echo preg_match_all($p, $str, $matches).PHP_EOL;
    var_dump($matches);
    
    
    // 2
    // array(1) {
    //  [0]=>
    //  array(2) {
    //    [0]=>
    //    string(5) "hello"
    //    [1]=>
    //    string(5) "world"
    //  }
    // }

    preg_replace($patten, $replacement, $subject) -> 返回替换后的结果;

    $replacement 可以使用变量来表示匹配到的字符串 $0(每一个结果), $1(第一个)...

    <?php
    $str = 'hello world';
    $p = '/\w+/';
    $replacement = '[$0]';
    echo preg_replace($p, $replacement, $str).PHP_EOL;
    
    // [hello] [world]


    正则表达式:

    正则表达式放在分隔符里面,分隔符可以是数字、非反斜线、非空格的任意字符 (一般是 / )

    忽略大小写(i): $p = '/hello/i'

    正则表达式


    贪婪模式:

    正则表达式那些表示重复的符号({}, +, *)默认是贪婪模式,会尽可能多的字符;

    如果要匹配尽可能少的字符,要在这些符号后面加上 ?

    查看全部

举报

0/150
提交
取消
课程须知
需要有一定的网页基础知识如HTML、CSS样式等,并且已经学习完成《PHP入门篇》对PHP已经有了简单的了解,如变量、常量、数据类型等。
老师告诉你能学到什么?
全面的掌握PHP的理论知识与实践中的应用方法,提高编程能力与掌握网页开发技能。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!