PHP编程经常容易记乱的知识

PHP经常容易记乱的知识

  1.echo和print的区别

  PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的。echo输出后没有返回值,但print有返回值,当其执行失败时返回flase。因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1。

  $r = print "Hello World";

  这意味着print可用在一些复杂的表达式中,而echo则不行。但是,因为echo语句不要求返回任何数值,所已在代码中echo语句的运行效率要略微快于print语句。

  2.include与require的区别

  include()与require()的功能也基本相同(包含),但在用法上也有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面代码中,如果变量$a为真,则将包含文件a.php:

  if($a){

  include("a.php");

  }

  而require()则和include()不同,不管$a取何值,下面的代码将把文件a.php包含进文件里:

  if($a){

  require("a.php");

  }

  在错误处理方面,使用include语句,如果发生包含错误,程序将跳过include语句,虽然会显示错误信息但是程序还是会继续执行!但requre却会给你来个致命错误。

  当然,从字面意思上我们也可以理解七分:requre是很强硬的请求、要求的意思。

  3.require_once()和include_once()语句

  题外话了,因为长的像,简单require_once()和include_once()语句分别对应于require()和include()语句。require_once() 和include_once()语句主要用于需要包含多个文件时,可以有效地避免把同一段代码包含进去而出现函数或变量重复定义的错误。

  4.空字符串(‘‘)和NULL的区别

  PHP中空字符串和NULL都是以值为0存储的,但是他们的类型并不一样,你可以试一下echo gettype(‘‘);和echo gettype(NULL);你会发现他们打印出来的分别是string和NULL,当然还有0也容易混淆,你可以试试echo gettype(0);打印一下类型,会发现0的类型是integer(整型),可见字符串(‘‘)、NULL和0是“等值”但不等类型。

  5.isset和 empty的区别

  从字面意思上我们就可以明白:empty是判断一个变量是否为“空”,而isset 则是判断一个变量是否已经设置。但是这里有一点绝对要注意起来:当一个变量值为0,empty 认为这个变量同等于空,即相当于没有设置。比如当我们检测$id 变量的时候,当$id=0 ,用empty和isset来检测变量$id是否已经配置,两都将返回不同的值:empty 认为没有配置,isset 则能够取得 $id 的值,看下边例子:

  $id=0;

  empty($id)?print "我是空的":print "我是$id ."; //结果:我是空的

  !isset($id)?print "我是空的":print "我是$id .";//结果:我是0

  6.==(等)和===(恒等)的区别

  回顾上面第四条空字符串("")和NULL的区别,再来看一个例子:

  ‘‘ == NULL;

  ‘‘ === NULL;

  运行之后你会发现第一个为true,而第二个则为false!可见==只是比较值是否相等,而===则不但比较值,还会比较类型,更为严格。

  7.self :: 和 this-> 的区别

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

  另外,如果从类的内部访问const或者static变量或者方法,那么就必须使用自引用的self,反之如果从类的内部访问不为const或者static变量或者方法,那么就必须使用自引用的$this。

  8.strstr() 与 strpos() 的区别

  stristr() 不区分大小写 strstr() 区分大小写

  函数查找字符串在另一个字符串中第一次出现的位置。

  如果成功,则返回字符串的其余部分(从匹配点)。如果没有找到该字符串,则返回 false。

  stripos() 不区分大小写 strpos() 区分大小写

  函数返回字符串在另一个字符串中第一次出现的位置。

  如果没有找到该字符串,则返回 false。

  经测试证明如果只是单纯查找判断是否存在则strpos()的执行效率要大于strstr()

  9.PHP中 HTTP_HOST 和 SERVER_NAME

  相同点:

  当满足以下三个条件时,两者会输出相同信息。

  1. 服务器为80端口

  2. apache的conf中ServerName设置正确

  3. HTTP/1.1协议规范

  不同点:

  1. 通常情况:

  _SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。

  _SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。

  2. 当服务器为非80端口时:

  _SERVER["HTTP_HOST"] 会输出端口号,例如:mimiz.cn:8080

  _SERVER["SERVER_NAME"] 会直接输出ServerName值

  因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT

  3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:

  httpd.conf配置如下:

  ServerName pprar.com

  ServerAlias http://www.pprar.com

  客户端访问域名http://www.pprar.com

  _SERVER["HTTP_HOST"] 输出 http://www.pprar.com

  _SERVER["SERVER_NAME"] 输出 pprar.com

  所以,在实际程序中,应尽量使用_SERVER["HTTP_HOST"] ,比较保险和可靠。

  如果在端口映射的情况下,并且在内网访问,用“$_SERVER[‘HTTP_X_FORWARDED_HOST‘]”比较好。

时间: 2024-10-09 15:08:16

PHP编程经常容易记乱的知识的相关文章

编程入门:C语言基础知识全网超全不用到处找了!(文末附清单)

你背或者不背,干货就在那里,不悲不喜 你学或者不学,编程就在那里,不来不去 听到这话的你是否略感扎心? 编程入门:C语言基础知识全网超全不用到处找了!(文末附清单)01基础知识 计算机系统的主要技术指标与系统配置. 计算机系统.硬件.软件及其相互关系. 微机硬件系统的基本组成. 包括:中央处理器(运算器与控制器),内存储器(RAM与ROM),外存储器(硬盘.软盘与光盘),输入设备(键盘与鼠标)输出设备(显示器与打印机).如果大家如果在自学遇到困难,想找一个C++的学习环境,可以加入我们的C++学

Android 并发编程:(一)基础知识 —— 架构和组件

本章节所有内容皆为原创,如需转载,请注明出处. http://blog.csdn.net/manoel/article/details/38462631 写在前面的话 很久没写博客了,一是因为自身水平有限,怕误人子弟:二是因为感觉没什么可写的:三是因为时间有限,要寻找工作.学习和生活之间的平衡. 最近一直在研究和梳理Android多线程编程的东西,希望能够把这些分享给大家. 想必做过Android应用开发的同学应该都会知道,多线程是一个特别"诡异"的地方.之所以称为"诡异&q

编程中无法回避的基础知识---事务

编程中无法回避的基础知识---事务 进行软件开发已经有一段时间了,有些东西虽然一直在用但是并不是很理解为什么去用它,它的机制又是什么,是不是还有其他的用途?就像我们在对数据库进行一系列操作时,我们为了保证数据的一致性往往会用到事务.本文将简单的介绍一下事务的相关知识,和简单用法. 基本概念 定义 事务是将一系列 数据源更新分组或分批的方法,以便在回滚事务时同时提交所有事务或者不提交任何事务[MSDN]. 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit

Android 并发编程:(一)基础知识 —— 1.2 程序的启动和终结

本章节所有内容皆为原创,如需转载,请注明出处. http://blog.csdn.net/manoel/article/details/38471825 Android是一个多用户,多任务的系统. 允许多个app在同一时刻执行,在多个程序之间切换并不会有明显的延迟. 多任务是由Linux内核负责处理的,而程序的运行基于Linux进程. Linux进程 Linux为每一个用户分配一个唯一的用户ID(User ID),用于区分不同的User. 因为权限的原因,每一个用户只能访问私有资源,没有用户(除

1、《UNIX环境高级编程》随记——基础知识

一.源码编译 1.源码下载 2.本人linux版本 Ubuntu 14.04 (GUN/Linux 3.13.0-0-32-generic x86_64) 3.前提准备 $sudo apt-get install gcc $sudo apt-get install libbsd-dev $cd apue.3e make ..等待编译完成 二.实例随笔 1.作者Makefile 以第一章第一个ls为例(apue.3e/intro/ls1.c) 第一个Makefile(apue.3e/Makefil

PHP socket编程需要了解的一些基本知识

前面讲到了 fsockopen 的各种情况,其中涉及了很多其它知识,比如chunked分段传输,Keep-Alive,HTTP头字段等额外的知识,如果对这些知识一知半解,会影响对 PHP 的 socket 编程知识的消化,所以这里来一次填坑,补充一些基本的知识吧. 1. 什么是Keep-Alive模式? 我们知道HTTP协议采用"请求-应答"模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HTTP协议为无连接的协议

ios网络编程(入门级别)-- 基础知识

在学习ios的过程中,停留在UI控件很长时间,现在正在逐步的接触当中!!!!!!在这个过程中,小编学到了一些关于网络编程知识,并且有感而发,在此分享一下: 关于网络请求的重要性我想不用多说了吧!!!对于移动客户端来说,网络的重要性不言而喻,常见的网络请求有GET, POST,今天来看一下两种网络请求的实现方式. 第一部分   小编的理解 一.两种网络请求--POST请求与GET请求的异同(这里小编只讨论的是异步链接) GET的语义是获取指定URL上的资源,将数据按照Variable = Valu

Python编程菜鸟成长记--A1--03--Python 环境安装(待完成)

1.重点知识 Windows 上如何安装 Python 3 Linux 上如何安装 Python 3 Mac 上如何安装 Python 3 Windows 上如何安装 Pycharm Mac 上如何安装 Pycharm Windows 上如何安装 Jupyter Mac 上如何安装 Jupyter 2.Python 解析器安装 3.Python IDE--Pycharm 安装 4. Python venv 虚拟环境安装 5.Python 文档.交互编程工具-- Jupyter 安装 6. Pyt

Js 函数式编程思想 (V客学院知识分享)

随之ECMAScript 标准规范不断更新,现在已经更新到ES7,不久ES8规范即将面世,为了是JS 语法对函数编程更加友好,诸如 RxJS (ReactiveX) 等函数式框架的不断流行.函数式编程则应该是以函数做为舰载主体,然后对函数进行拆分封装.更加抽象,可扩展性极强. 与传统命令式函数相比存在那些优势? 语法精简清晰 通用性更好 维护及可扩展性更好 限制作用域 以下列举函数对比 // 数组中每个单词,首字母大写 // 一般写法 const arr = ['apple', 'pen', '