热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP常用基础知识和学习资源

一、PHP常用基础知识1、PHP的魔法函数__construct():实例化对象时被调用。当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。如

一、PHP常用基础知识

1、PHP的魔法函数 

  • __construct():实例化对象时被调用。

    • 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。

    • 如果父类中存在魔法函数和构造函数,子类又重写构造函数,则实例化子类时调用子类中的构造函数。

    • php4以前的版本中,类的构造函数即是类的同名函数,而到了php5类的构造函数多了一个__construct魔法函数 :

  • __destruct():当删除一个对象或对象操作终止时被调用。

  • __call():对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。

  • __get():读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。

  • __set():设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用__set函数。

  • __toString() :打印一个对象的时被调用。如echo $obj;或print $obj;

    • function __toString()
          
      {
              return $this->content;
          }
      //输出字符串
          function toString()
          
      {
              return $this->content;
          }
    • 执行的结果相同. 区别在于:

      • 前一个是魔术函数, 在需要字符串值的地方会自动调用它进行对象的类型转换.(如用 echo进行输出时、强制类型转换时)

      • 后一个需要在代码中明确调用才有机会执行.

  • __clone():克隆对象时被调用。如:$t=new Test();$t1=clone $t;

  • __sleep():serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。

  • __wakeup():unserialize时被调用,做些对象的初始化工作。

  • __isset():检测一个对象的属性是否存在时被调用。如:isset($c->name)。

  • __unset():unset一个对象的属性时被调用。如:unset($c->name)。

  • __set_state():调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。

  • __autoload():实例化一个对象时,如果对应的类不存在,则该方法被调用。

2、PHP的魔法变量

  • __LINE__:返回文件中的当前行号。

  • __FILE__:返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。

  • __FUNCTION__:返回函数名称(PHP4.3.0新加)。自PHP5起本常量返回该函数被定义时的名字(区分大小写)。在PHP4中该值总是小写字母的。

  • __CLASS__:返回类的名称(PHP4.3.0 新加)。自PHP5起本常量返回该类被定义时的名字(区分大小写)。在PHP4中该值总是小写字母的。

  • __METHOD__:返回类的方法名(PHP5.0.0新加)。返回该方法被定义时的名字(区分大小写)。

3、public 、protected、private

  • public 表示全局,类内部外部子类都可以访问;

  • protected表示受保护的,只有本类或子类或父类中可以访问;

  • private表示私有的,只有本类内部可以使用。

4、PHP中的操作符::、->、self、$this

  • 操作符

    • 静态变量:

      • 静态变量是指用static声明的变量,这种变量与局部变量的区别是,当静态变量离开了它的作用范围后,它的值不会自动消亡,而是继续存在,当下次再用到它的时候,可以保留最近一次的值。

    • 自定义常量:

      • 所谓自定义常量,就是指用一个字符标识来代表另外一个对象,这个对象可以是一个数值,一个字符串,一个布尔值等等。它的定义与变量有着许多相似之处。只有一点不一样,那就是变量的值在程序运行过程中可以任意更改,而自定义常量一旦定义下来后,在程序运行中就再也不能修改了。 

      • 定义方式如下: define("YEAR","2012"); 

    • 在类的外部访问:

      • 操作符:: )在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符:: 

      • 操作符->)  如果被引用的变量或者方法没有被声明成const或者static,那么就必须使用操作符-> 

    • 在类的内部访问:

      • (操作符 self) 如果从类的内部访问const或者static变量或者方法,那么就必须使用自引用的self 

      • (操作符 $this) 如果从类的内部访问不为const或者static变量或者方法,那么就必须使用自引用的$this 

  • 说明

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

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

    • 用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。 

    • 就像其它所有的PHP静态变量一样,静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。 所以你可以把静态属性初始化为整型或数组,但不能指向另一个变量或函数返回值,也不能指向一个对象。 

    • PHP5.3.0之后,我们可以用一个变量来动态调用类。但该变量的值不能为关键字self, parent 或static。

  • 实例

    •  /* *author:ajax123 *qq:283400245 */ 
      class person
          static $name="ajax123";//static声明静态属性 
          static $age=25;//static声明静态属性 
          static $address="北京";//static声明静态属性 
          function song()
              echo "My name is : ".self::$name."
      "
      ;//类内部:通过通过self 类访问静态属性 
              echo "I am ".self::$age."
      "
      ;//类内部:通过通过self 类访问静态属性 
              echo "I live in ".self::$address."
      "
      ;//类内部:通过self 类访问静态属性 
          } 

      echo person::$name."
      "
      ;//类外部:通过类名person访问静态属性 
      echo person::$age."
      "
      ;//类外部:通过类名person访问静态属性 
      echo person::$address."
      "
      ;//类外部:通过类名person访问静态属性 
      ?>

5、PHP中的流程替代语法:冒号、endif、endwhile、endfor

替代语法的基本形式:

左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;

这些语法能发挥的地方是在PHP和HTML混合页面的代码里面。好处如下:

    1.使HTML和PHP混合页面代码更加干净整齐。

    2.流程控制逻辑更清晰,代码更容易阅读

    3.一些从ASP等其他类basic语言家族转来的朋友,会更容易使用PHP。

if语句的替代语法使用如下:

 if ($a == 5): ?>
  <div>等于5div>

 elseif ($a == 6): ?>
  <div>等于5div>

 else?>
  <div>不是5就是6div>

 endif?>

while替代语法:

 while (expr): ?>
  <li>循环点什么li>

 endwhile?>

for替代语法:

 for (expr1; expr2; expr3): ?>
  <li>循环点什么li>

 endfor?>

foreach替代语法:

 foreach (expr1): ?>
  <li>循环点什么li>

 endforeach?>

switch替代语法:


switch ($i):
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
    default:
        echo "i is not equal to 0, 1 or 2";
endswitch;
?>

6、自动转义配置 magic_quotes_gpc 和 magic_quotes_runtime

PHP提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在 php.ini设置为ON的时候,就会为我们引用的数据碰到单引号'和双引号"以及反斜线 \ 时自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行,可是我们在php不同的版本或者不同的服务器配置下,有的 magic_quotes_gpc和magic_quotes_runtime设置为on,有的又是off,所以我们写的程序必须符合on和off两种情况。

那么magic_quotes_gpc和magic_quotes_runtime两个函数有什么区别呢?看下面的说明: 

  • magic_quotes_gpc 

    • 作用范围:WEB客户服务端;

    • 作用时间:请求开始时,例如当脚本运行时. 

  • magic_quotes_runtime 

    • 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;

    • 作用时间:每次当脚本访问运行状态中产生的数据. 

所以 magic_quotes_gpc的设定值将会影响通过Get/Post/COOKIEs获得的数据;magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据。 

例子说明: 

<form action="" method="post" >
STR:<input type="text" name="str"
<input type="submit"
</form>

<?php
/* 我们在表单里填写:    '"\    这些符号,如果magic_quotes_gpc没有开启,那么他们不会被反斜杠转义 */
echo '现在通过POST传递过来的值是:' ,$_POST['str'], '<br />'
if (get_magic_quotes_gpc()) {      // 检查magic_quotes_gpc是否打开,如果没有打开,用addslashes进行转义
      $str $_POST['str'];
else {
      $str = addslashes($_POST['str']);

echo '这里是转义过后的:' ,$str'<hr />';
$sql "INSERT INTO lastnames (lastname) VALUES ('$str')"
//=====================================================================================
//-----magic_quotes_gpc只会转义:     通过Get/Post/COOKIEs获得的数据
//-----magic_quotes_runtime会转义:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的
//=====================================================================================
$data = implode(file('try.php'));      // 我们在里面依然写'"\这几个字符,用来测试
echo '这里是try.php的数据,';
if (get_magic_quotes_runtime()) {
      $data $data;
      echo '被系统自带转义的' .$data;
else {
      echo '被addslashes转义了的' .$data = addslashes($data);

$sql "INSERT INTO lastnames (lastname) VALUES ('$data')";
echo '<br />SQL语句为:<br />' ,$sql;
//---入库都转义了,但是多余了反斜杠,我们要读出来是原来的数据时候使用stripslashes()去掉反斜杠
//---stripslashes()和addslashes()作用相反
?>

最关键的区别是就是上面提到的2点:

  • 他们针对的处理对象不同 magic_quotes_gpc的设定值将会影响通过Get/Post/COOKIEs获得的数据

  • magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据

在这里顺便在提几个想关联的函数:

  • set_magic_quotes_runtime():设置magic_quotes_runtime值. 0=关闭.1=打开.默认状态是关闭的.可以通过 echo phpinfo(); 查看

  • magic_quotes_runtimeget_magic_quotes_gpc():查看magic_quotes_gpc值.0=关闭.1=打开.get_magic_quotes_runtime():查看magic_quotes_runtime值。0=关闭.1=打开.注意的是没有 set_magic_quotes_gpc()这个函数,就是不能在程序里面设置magic_quotes_gpc的值。

7、“@” 的作用

如果连接数据库不成功的,前面的“@”就能把错误显示给抑制住,也就是不会显示错误,然后再抛出异常,显示自己定义的异常处理,添加这个只是为了让浏览者不看到,不友好的页面,并不能抑制住错误,只能抑制显示错误!@ 用在你觉得以后运行有可能会出现错误的地方 , @后面要来个空格!最好少用,好像增加系统开销.

二、学习资源列表

  • PHP加MySQL网站设计入门实践实战篇 :http://www.howzhi.com/course/PHPMYQL2/ 大量实例视频,文件上传、邮件、数据库、Orcale数据库操作、留言本(Mysql版和orcale版)、在线投票、论坛、聊天室、CMS、商城等。

  • MySQL数据库性能优化  :http://www.howzhi.com/course/mysql-performance/ 
    从缓存参数、表结构、索引、SQL四方面讲解了MySQL数据库性能优化的一些常用方法,望对初中级 MySQL DBA以及其他对MySQL性能优化感兴趣的朋友们有所帮助 
    作者:简朝阳 ,数据库专家、《MySQL性能调优与架构设计》作者 

  • NodeParty杭州站第二期系列讲座 :http://www.howzhi.com/course/nodejsparty2/ 
    高性能node应用分析、node构建静态资源管理系统、Nodojs学些过程。 

  • 好知网讲座第一期《大流量网站架构》 :http://www.howzhi.com/course/dllwzjiagou/ 
    Kent以自己曾经管理过的一个项目为例,讲解了在大型网站架构中所遇到的一些问题及解决方法 
    主讲师:Kent,10余年行业经验,曾任职19楼架构师和某公司CTO。 

  • WEB运维安全 已发布 :http://www.howzhi.com/course/websafty/ 
    高并发下网站的优调,WEB应用安全防护,如何成为优秀的运维架构师。演讲嘉宾:倪顺坚,阿里巴巴资深架构师;邵海杨,53KF科技技术顾问;dreamice, ChinaUnie资深版主。 

  • 哈弗大学《构架动态网站 :http://www.howzhi.com/course/dynamicweb/ 
    哈弗的E-75课程,讲解HTTP、PHP,SQL,JAVASCRIP、Ajax等知识。英文的哦,有点考英语水平,不过有翻译。 

  • 步入软件人生 :http://www.howzhi.com/course/zjrjrs/ 
    拥有十几年软件开发和敏捷管理经验的Kent,将为你讲解学软件学什么,软件可以做什么,创业中要注意那些问题等。  


推荐阅读
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
author-avatar
阿尔及利亚奥兰叉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有