zoukankan      html  css  js  c++  java
  • php 语法2

    PHP基本语法手册 good

    PHP基础教程5idev

    浅谈PHP的静态变量

    函数的静态变量

    类的静态成员

    静态属性

    简单的静态构造器

    PHP 和 AJAX 请求

    1. 当该事件被触发时,执行名为 showHint() 的函数

    2.表单的下面是一个名为 "txtHint" 的 <span>。它用作 showHint() 函数所返回数据的占位符。document.getElementById("txtHint").innerHTML=xmlHttp.responseText

    PHP底层的运行机制与原理

    多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,随着时代发展,PHP也早已支持多线程模型。

    弱类型语言

    引擎(Zend)+组件(ext)的模式降低内部耦合。

    中间层(sapi)隔绝web server和PHP。

    语法简单灵活,没有太多规范。缺点导致风格混杂,但再差的程序员也不会写出太离谱危害全局的程序。

    HP从下到上是一个4层体系:

    • Zend引擎:Zend整体用纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的 处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所 有的外围功能均围绕Zend实现。
    • Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array 系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的 PHP中间层、富文本解析就是extension的典型应用)。
    • Sapi:Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过 sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
    • 上层应用:这就是我们平时编写的PHP程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。

    如果PHP是一辆车,那么车的框架就是PHP本身,Zend是车的引擎(发动机),Ext下面的各种组件就是车的轮子,Sapi可以看做是公路, 车可以跑在不同类型的公路上,而一次PHP程序的执行就是汽车跑在公路上。因此,我们需要:性能优异的引擎+合适的车轮+正确的跑道。

    Sapi通过通过一系列的接口,使得外部应用可以和PHP交换数据并可以根据不同应用特点实现特定的处理方法,我们常见的一些sapi有:

    • apache2handler:这是以apache作为webserver,采用mod_PHP模式运行时候的处理方式,也是现在应用最广泛的一种。
    • cgi:这是webserver和PHP直接的另一种交互方式,也就是大名鼎鼎的fastcgi协议,在最近今年fastcgi+PHP得到越来越多的应用,也是异步webserver所唯一支持的方式。
    • cli:命令行调用的应用模式

    PHP实现了一个典型的动态语言执行过程:拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令(opcodes),然后 ZEND虚拟机顺次执行这些指令完成操作。PHP本身是用C实现的,因此最终调用的也都是C的函数,实际上,我们可以把PHP看做是一个C开发的软件。

    PHP的执行的核心是翻译出来的一条一条指令,也即opcode。

    Opcode是PHP程序执行的最基本单位。一个opcode由两个参数(op1,op2)、返回值和处理函数组成。PHP程序最终被翻译为一组opcode处理函数的顺序执行。

    HashTable是zend的核心数据结构,在PHP里面几乎并用来实现所有常见功能,我们知道的PHP数组即是其典型应用,此外,在zend内部,如函数符号表、全局变量等也都是基于hash table来实现。

    PHP的hash table具有如下特点:

    • 支持典型的key->value查询
    • 可以当做数组使用
    • 添加、删除节点是O(1)复杂度
    • key支持混合类型:同时存在关联数组合索引数组
    • Value支持混合类型:array (“string”,2332)
    • 支持线性遍历:如foreach

    Zval主要由三部分组成:

    • type:指定了变量所述的类型(整数、字符串、数组等)
    • refcount&is_ref:用来实现引用计数(后面具体介绍)
    • value:核心部分,存储了变量的实际数据

    PHP session有效时间和回收机制

    修改php中的session过期时间可以修改php配置文件php.ini中的session.gc_maxlifetime即可。

    当php每发出一次请求时,会有1/100的概率(默认值)触发"session回收"。如果"session回收"发生,那就会检查/tmp /sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失 效。

    session在浏览器端,只需要保存session ID(由server端生成的唯一ID)就可以了。有两种保存方式:在cookie中、在url里面。如果cookie中保存session ID,就可以看到浏览器的cookie中有一个PHPSESID变量。如果是URL传递的,就可以看到形如:

    index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381的URL。

    PHP MySQL开发中的一些经验

    变量都要初始化

    不要复制粘贴,即使是要用到现成的代码,也要一行一行的审阅后,再加入到新项目,因为经验告诉我们,这太容易出错了,对于使用开源类这种大段代码更需要

    记录一些必要的错误日志,比如写文件失败、写memcache失败,socket连接失败、读写数据库失败,日志能够帮助出现问题时的快速定位,外部生产环境我个人是强烈建议关闭所有错误报告的;

    双引号中出现的变量建议加上大括号,至于是"${nider}at gmail.com"还是"{$tom}at zendstudio.net"看个人习惯,我更喜欢后面一种;

    AJAX传数据的时候,不要将数据库查出的数组直接json_encode后传给客户端,这样做不仅有一定的安全风险(字段名暴露),而且一些不需要的数据被传出浪费带宽,这条同样适用于API接口

    用$GLOBALS['var']代替global $var

    autoload是个很灵活的东西
    PHP的引用类型是很高效的,在进行复杂运算时建议使用
    @符号抑制错误是很耗性能的,因此尽可能的找到替代方案

    SQL语句用双引号,其中的值都用单引号,例如"INSERT INTO gril SET money='{$iMaxMoney}',age='18′"
    用mysqli扩展代替mysql扩展
    用mysqli_real_escape_string和mysqli_escape_string处理传出sql语句中的变量

    INERT DELEYED、INSERT IGNORE、SELECT DISTINCT…这种语句通常有意想不到的好效果
    varchar类型并不是不能超过255长度,而是超过了255,这个字段就不能建立索引了,所以,看你的实际需要了

    PHP自动加载__autoload的工作机制   参考练习 simpleK

    在这个例子中,no-autoload.php文件需要使用Person类,它使用了require_once将其包含,然后就可以直接使用Person类来实例化一个对象。

    但随着项目规模的不断扩大,使用这种方式会带来一些隐含的问题:如果一个PHP文件需要使用很多其它类,那么就需要很多的 require/include语句,这样有可能会造成遗漏或者包含进不必要的类文件。如果大量的文件都需要使用其它的类,那么要保证每个文件都包含正确 的类文件肯定是一个噩梦。

    PHP5为这个问题提供了一个解决方案,这就是类的自动装载(autoload)机制。autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。

    通常PHP5在使用一个类时,如果发现这个类没有加载,就会自动运行__autoload()函数,在这个函数中我们可以加载需要使用的类。

    Fatal error: Call-time pass-by-reference has been removed

    意思是调用时引用传参已经被移除了 &$

    AJAX教程5 - onreadystatechange 事件

    当 readyState 等于 4 且状态为 200 时,表示响应已就绪 

    Frameworks php框架 全能框架 微框架 组件框架

    解析PHP中ob_start()函数的用法 

    php打开文件fopen函数

    "r" 只读方式打开,将文件指针指向文件头。
    "r+" 读写方式打开,将文件指针指向文件头。
    "w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    "w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    "a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
    "a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
    "x"

    创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

  • 相关阅读:
    Android学习之Android studio TraceView和lint工具的使用具体解释
    Caffe + Ubuntu 15.04 + CUDA 7.0 安装以及配置
    web安全之渗透测试
    屏蔽alert弹框下面一层的操作
    org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
    java.lang.NoClassDefFoundError
    20 道 Spring Boot 面试题
    java节假日api--关于节假日想到的
    CSVWriter生成文件时writer.writeRecord();方法保存的文件末尾多一个空行
    git思维导图
  • 原文地址:https://www.cnblogs.com/dqxu/p/4896985.html
Copyright © 2011-2022 走看看