php里面

php 中关于时区的那点事

科普一下什么是时区

众所周知,地球绕着太阳转的同时也会自转,因此同一时刻不同地区所接收到太阳照射的情况不同,所以有的地区是日出,有的地区是日落,还有的地区可能是黑夜.

既然地球上的不同地区时间不同,那总要有统一的时间刻度才能方便文化科技交流吧,不然大家说的都是当地时间,这样岂不是乱套了?

有问题就要解决问题,不同地区时间不同就要统一时间标准,而统一时间标准的前提就是要弄清楚全球的时间差异到底在哪以及各地的当地时间如何互相转换.

原来的时间标准是格林尼治标准时间,随着精确计时的发展需要,已被新的时间标准所取代,目前的时间标准是世界协调时.

现在有了统一的时间标准,不同地区的时间就可以统一换算成世界协调时再转换成当地时间了,再也不会出现同一时刻不同时间了!

示例:

北京时间(UTC+8) : 2019-05-30 13:30:00世界时间(UTC) : 2019-05-30 05:30:00东部时间(UTC-5) : 2019-05-30 00:30:00格林尼治标准时间

格林尼治标准时间(又称格林威治平均时间或格林威治标准时间,英文是GreenwichMeanTime,简称GMT),格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治时)的时间.

格林尼治是英国伦敦的一个小镇,是地理经度的起点,本初子午线所在的经度是零度经度,所在的时区是零时区.

我们知道一天共有 24 小时,对应着全球 24 个时区,而地球自西向东自转,零时区后依次是东一区到东十一区,然后是东十二区.紧接着是西十二区,西十一区到西一区,最后又回到零时区.

其中东十二区和西十二区是同一个时区,又被称为东西十二区.

总的来说,时区分为东十二区和西十二区以及零时区,其中东西十二区是同一个时区,因此共有 24 个时区.

示例:

由于北京位于东八区,比零时区多个 8 个时区,意味着北京时间比格林标准时间快8 个小时.

所以,北京时间中午 12 点整的时候,格林尼治才清早 4 点钟,估计还在睡觉呢! ( GMT+8 就是北京时间)

格林尼治标准时间与地球自转有关,不能满足精确计时的需求,因此不再作为标准时间,取而代之的是协调世界时.

协调世界时

协调世界时(又称世界统一时间或世界标准时间或国际协调时间,英文是Coordinated Universal Time,简称UTC),协调世界时是以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间的一种时间计量系统.

在不需要精确到秒的情况下, GMT 和 UTC 基本一致,但 UTC 是以更加精确的原子时为基础,因此常用于科学计算领域,也是目前时间计量的统一标准.

示例:

北京时间 12:00 ,换算成 GMT 或 UTC 时间都是 04:00 ( UTC+8 也是北京时间)

北京时间

北京时间(又称中国标准时间),是首都北京所在的时区作为中国的标准时间,比格林尼治标准时间快8小时.

我国幅员辽阔,从西到东横跨东五,东六,东七,东八和东九等五个时区.所以全国统一采用首都北京所在的东八时区的区时作为标准时间,也就是北京时间.

时区信息数据库

时区信息数据库,又称 Olson数据库,是一个主要应用于电脑程序以及操作系统的可协作编辑世界时区信息的数据库.

时区信息数据库采用按“区域/位置”命名规范,方便应用于计算机世界,其中英文地名中的空格用下划线“_”代替,连词符“-”只在英文地名本身包含时使用.

示例:

Asia/Hong_Kong : 亚洲/香港Asia/Macau : 亚洲/澳门Asia/Shanghai : 亚洲/上海Asia/Taipei : 亚洲/台北Asia/Urumqi : 亚洲/乌鲁木齐上述时区主要是 php 中所支持的中国时区,参考 亚洲所支持的时区列表

关于时区的编程实现

时区不仅仅是现实生活的问题,计算机编程世界也有时间,自然也离不开时区的概念.

在计算机世界中,一切都是数据,最好时区的概念也能体现在相关数据库中,幸运的是已经有前辈为我们提供了时区信息数据库,而各类语言基本都会提供时区的工具类.

php 中的日期时间函数库是 php内置函数库,我们可以方便地操作时间,设置时区等.

正常情况下, date 扩展默认是启用的,我们可以输入 phpinfo 打印出 php 的基本信息,然后搜索关键字 date 就可以找到关于 date 扩展的相关信息.

示例

结果默认时区:当前时区: UTC当前时间: 2019-05-30 05:30:00

由此可见,假设不设置时区的话,默认时区是协调世界时,该时区和北京时间相比慢 8 个小时!

设置时区的三种姿势

翻阅 php 开发文档中可以找到目前所有支持时区列表,下面整理出关于中国的主要时区.

Asia/Hong_Kong : 亚洲/香港Asia/Macau : 亚洲/澳门Asia/Shanghai : 亚洲/上海Asia/Taipei : 亚洲/台北Asia/Urumqi : 亚洲/乌鲁木齐常用时区是上海,并没有北京,当然也可以设置成 PRC (中华人民共和国)!

如果没有设置时区的话,默认时区应该是协调世界时(UTC),虽说是通用的时间标准,但转换成当地时间还是需要一定换算的,而且看起来也不太舒服.

所以最好还是修改一下时区的设置项,如果业务不考虑国际化需求,那么永久性把时区固定就可以了,如果有国际化的业务场景,那么最好能够动态设置时区,这样就能清楚知道当地时间了.

因此,下面主要提供两种方式来设置时区,分别是静态设置和动态设置,其中动态设置又提供了两种方法.

静态修改 php 配置

php 的配置文件默认位于 : /private/etc/php.ini ,打开文件后修改 date.timezone 选项.

由于这种方法是直接修改配置文件,因此时区设置后适用于所有脚本,只不过需要重启服务器方可生效.

示例

结果# 去掉;并设置时区,取值可以是PRC,也可以是Asia/Shanghai等时区date.timezone = PRC详情请参考: http://php.net/date.timezone

动态设置 php 配置

ini_set 支持设置当前脚本的默认时区选项.

静态设置时区仅仅适合时区固定的情况,如果需要动态切换时区,修改配置文件就不能满足这种情况了.

因此,php 中还提供了动态修改 php.ini 配置文件的方法,ini_set() 方法刚好支持动态设置时区.

不用重启服务器,但仅仅针对当前脚本生效,其中 ini_set 方法支持的 php.ini 配置选项列表

示例

结果当前时区: Asia/Tokyo当前时间: 2019-05-30 14:30:00

动态设置 php 时区

date_default_timezone_set 方法用于设置当前脚本的默认时区.

ini_set 虽然支持设置时区选项,但毕竟不是专业设置时区的方法,date_default_timezone_set 才是专门设置时区的方法.

这两个方法都属于动态设置时区,也都是针对当前脚本生效,也都不用重启服务器就能立马生效.

示例

结果当前时区: Asia/Tokyo当前时区: UTC当前时间: 2019-05-30 05:30:00

关于时区的一些总结

时区和时间密切相关,统一时间说的其实是统一时间的标准,这样一个地区的当地时间就可以轻易转换成另一个地区的当地时间了.

目前世界上统一的时间标准是协调时间时(UTC),中国的时间标准是北京时间,北京时间比协调时间时快 8 个小时.

现实世界的时区也要反映到计算机世界,其中时区信息数据库就是用于表示现实世界的时区概念.

由此可见,时区是一个通用概念,不仅 php 有时区,java 和 js 等语言也有时区概念,可以说只要有时间的地方都离不开时区.关于时区的小技能,你 get 到了吗?

美剧<<闪电侠>>当地时间是星期二晚上八点开播,请问北京时间何时开播?英剧<<神探夏洛克>>北京时间凌晨四点半开播,请问当地时间是何时开播?泰剧<<新铁石心肠>>当地时间是晚上九点二十开播,请问北京时间是何时?参考资料

时区相关知识扫盲时区时差时间换算

展开
收起

PHP中的8个模板引擎

当我们在PHP中讨论模板引擎时,许多开发人员会告诉你,这是没有必要的,他们会说这是学习时间和资源的浪费,因为PHP本质上也是一个模板引擎。但是当你看过很多框架之后,你会发现很多框架都会有模板引擎的存在,所以说php中的模板引擎还是有必要了解一下的。

Mustache

受 ctemplate 和 et等的启发,Mustache 是一种与框架无关的方式来呈现无逻辑视图。正如 ctemplates 所说,"它强调将逻辑与表示分离:不可能将应用程序逻辑嵌入到这种模板语言中。视图不是由 ERB 或 HAML 组成的视图,而是包含随机帮助器和任意逻辑,而是分为两个部分:PHP 类和 HTML 模板。所有逻辑、决策和代码都包含在视图中。所有标记都包含在模板中。模板除了在视图中的引用方法外,什么都不做。这种严格的分离使编写干净的模板更容易,更容易测试视图,并且更有趣地处理应用的前端。

以下代码段提供了 Mustaches 语法外观的预览:

Hello {{name}}You have just won {{value}} dollars!{{#in_ca}}Well, {{taxed_value}} dollars, after taxes.{{/in_ca}}

Plates

plates是一个原生PHP模板系统,快速,易于使用,易于扩展是它的特性。它受到出色的 Twig 模板引擎的启发,并努力将现代模板语言功能引入 PHP 模板中。plates原生的PHP 模板而不是编译的模板语言(如 Twig 或 Smarty),因此受到对速度要求极致的开发人员喜爱。

此模板引擎具有:

原生的 PHP 模板,无需学习新语法plates是模板系统,而不是模板语言plates鼓励使用现有的PHP函数通过模板布局和继承增加代码重用用于将模板分组到命名空间的模板文件夹跨模板的数据共享将数据预先分配给特定模板内置逃生帮助器易于使用的功能和扩展与框架无关,将与任何项目配合使用分离设计使模板易于测试可以使用composer引入以下代码段提供了板模板引擎语法外观的预览:

<?php $this->layout('template', ['title' => 'User Profile']) ?><h1>Welcome!</h1><p>Hello <?=$this->e($name)?></p><h2>Friends</h2><ul> <?php foreach($friends as $friend): ?> <li> <a href="/profile/<?=$this->e($friend->id)?>"> <?=$this->e($friend->name)?> </a> </li> <?php endforeach ?></ul><?php if ($invitations): ?> <h2>Invitations</h2> <p>You have some friend invites!</p><?php endif ?>

Blade

blade是laravel内置的模板引擎。与其他流行的PHP模板引擎不同,Blade 不会限制您在视图中使用纯 PHP 代码。事实上,所有 Blade 视图都编译成普通的 PHP 代码并缓存,直到修改它们,这意味着 Blade 基本上为应用程序增加了零开销。视图文件使用 .blade.php 文件扩展名。

然而离开laravel,我们很少看到blade的身影,这也许也是它没有更流行的一个原因吧。

Volt

Volt 是一种超快且设计友好的模板语言,采用 C 来编写的。Volt 与 Phalcon 的其他组件高度集成,就像您可以在应用程序中将其用作独立组件一样。volt的灵感来自Jinja,最初由阿明·罗纳彻创作。。Volt 的语法和功能已经通过更多的元素进行了增强,当然,开发人员在使用 Phalcon 时已经习惯了它的极致性能。

以下代码段提供了 Volt 代码外观的快速预览:

{# app/views/products/show.volt #}{% block last_products %}{% for product in products %} * Name: {{ product.name|e }} {% if product.status === 'Active' %} Price: {{ product.price + product.taxes/100 }} {% endif %}{% endfor %}{% endblock %}

Dwoo

Dwoo 是 PHP 的现代、灵活和面向的对象模板引擎,有助于将表示 (HTML/CSS) 与应用程序逻辑分离。在许多方面,dwoo 与 Smarty 的模板和插件兼容,因为 dwoo 的作者基于 Smarty 引入到 Web 开发领域的一般想法。

Dwoo 的模板引擎是一个写得很好、面向对象的模板引擎,与 Smarty 相比,它允许更轻松、更快的开发,并且它仍然足够兼容,允许使用 Smarty 的开发人员平稳过渡到 dwoo。

以下代码段提供了 Dwoo 语法外观的预览:

<!DOCTYPE html><html> <head> <title>My Webpage</title> </head> <body> <ul id="navigation"> {foreach $navigation item} <li><a href="{$item.href}">{$item.caption}</a></li> {/foreach} </ul> <h1>My Webpage</h1> {$a_variable} </body></html>

Smarty

Smarty 是诞生非常早的 PHP 的模板引擎,它设计之初就是为了将表示 (HTML/CSS) 与应用程序逻辑分离。这意味着PHP代码是应用程序逻辑,并且与表示分离。Smarty 将模板的副本编译为 PHP 脚本。通过这种方式,您可以获得模板标记语法和 PHP 速度的优点。首次调用每个模板,然后从该点开始使用编译版本,编译一次。Smarty 会为您处理这一问题,因此模板设计器只需编辑 Smarty 模板,就更改了编译的版本,此方法使模板易于维护,并且由于编译的版本是PHP,操作代码加速器(如 APC 或 ZendCache)将继续处理已编译的脚本。

Smarty 是一个模板引擎,用作应用程序的 View 组件。Smarty 可轻松与上面列出的任何引擎耦合为视图组件。Smarty 不保证良好的应用程序设计或适当的演示分离,这仍然需要由有能力的开发人员和网页设计人员来解决。

以下代码段提供了语法外观的预览:

{include file="header.tpl" title="Info"}User Information:<p>Name: {$name|capitalize}<br>Address: {$address|escape}<br>{include file="footer.tpl"}

Twig

Twig 是 PHP 的模板语言。Twig 使用类似于 Django 和 Jinja 模板语言的语法,这些语言启发了 Twig 的发展。

快速: Twig编译模板到纯优化的 PHP 代码。与常规PHP代码相比,开销减少到最低限度。安全:Twig具有用于评估不受信任的模板代码的沙盒模式。这允许 Twig 用作用户可以修改模板设计的应用程序的模板语言。灵活:Twig由灵活的词汇和解析器提供动力。这允许开发人员定义自己的自定义标记和筛选器,并创建自己的 DSL。Twig 支持轻松构建强大模板所需的一切:多个继承、块、自动输出转义等等。语法易于学习,并已经过优化,使 Web 设计人员无需妨碍其操作即可快速完成工作。

以下代码段提供了此模板引擎语法的预览:

<div class="form-control"> <i class="fa fa-calendar"></i> {{ form_label(form.dueDate) }} {{ form_widget(form.dueDate) }} <small>{{ form_help(form.dueDate) }}</small> <div class="form-error"> {{ form_errors(form.dueDate) }} </div></div>

LATTE

latte也是PHP的模板引擎之一,它可简化您的工作并确保输出免受漏洞(如 XSS)的攻击。

latte是快速的:它编译模板到平原优化的PHP代码。latte是安全的:它是第一个引入内容感知的逃避的PHP引擎。latte是易用的:它有直观的语法,并可以帮助你轻松建立更好的网站。latte语法是:

<ul n:if="$items">{foreach $items as $item} <li id="item-{$iterator->counter}">{$item|capitalize}</li>{/foreach}</ul>

展开
收起

PHP 庆祝 25 周年,朝着 8.0 版本继续努力

2020 年 6 月 8 日,PHP 迎来了自己的 25 周岁生日。JetBrains 在博客中梳理了该语言自 1995 年诞生以来的种种历程,这种语言最初是用 C 语言编写的一组通用网关接口(Common Gateway Interfac,CGI)二进制文件,第一个 PHP 脚本套件被称为“个人主页工具”或“PHP 工具”。

1998 年发布的 PHP 的第三次迭代是 Andi Gutman 和 Zeev Suraski 重写了 Lerdorf 编写的现有解释器的结果。JetBrains 解释称,此版本的 PHP 3.0 很像现在的 PHP 的第一个版本。 语言的名称改为递归缩写“PHP: Hypertext Preprocessor”。顶峰时,PHP 3 安装在互联网大约 10% 的 Web 服务器上。1999年,Zend 公司成立,直到今天,Zend 仍在继续为 PHP 做出贡献并积极参与其中。

最初没有 PHP 的正式规范,在着这种情况下该语言仍持续发展了 20 年的时间。直到 2014 年,PHP 规范出现。PHP 语言规范在 Facebook 内部开发,然后转移到了公共领域。

而与此同时,除了这个 25 周年纪念日外,PHP 8.0 也有望在今年发布。程序员 Brent Roose 透露了即将在 2020 年 11 月底发布的 PHP 8.0 中即将发布的功能。此版本的第一个 Alpha 版将于 6 月 18 日发布。同时,PHP 8.0 将引入多项重大更改,并引入一些新功能,例如 JIT 编译器、联合类型和属性。

JIT 编译器

Roose 解释称,尽管还没有基准测试,但 JIT 编译器有可能改善 PHP 的性能。不像 C 或 Java 这样的编译语言,PHP 是一种解释性语言,这意味着它会在运行时转换为机器码。JIT 在运行时编译部分代码,以便可以使用代码的编译版本。并表示,将 JIT 编译器添加到 PHP 的原因是,它可能使其能够在 Web 开发上下文之外被视为一种高性能语言,并且可以随着时间的流逝而得到改进。但是,一个很大的缺点是维护起来很复杂。

联合类型

联合类型是两种或多种类型的集合,表示可以使用其中任何一种。而由于 PHP 是一种动态类型的语言,因此联合类型有很多用例。

属性

属性在其他语言中通常称为注解,它提供了一种向类添加元数据的方法,而无需解析文档块。

RFC 中的属性示例:

有关功能和代码示例的完整列表可查看博客。

展开
收起

最新数据显示PHP网站中有50%使用php7版本以上

昨天(14号),根据Sam Soltano发布有关PHP网站有关PHP版本数据显示,PHP网站中有50%使用php7版本以上,距离其PHP7最初发布已经过去4年时间了。

PHP7的发布使得php网站运行性能提升一倍左右,PHP作为web开发最热门编程语言,一直从专注前端用户的体验效果。我们都应该知道PHP5是PHP发展历史上性能与功能上的一次重要改革,但是随意web开发的更高需要,大型PHP开发项目PHP5表现比较吃力,自从PHP7发布之后,web开发将要打破一切。

从官方说法,性能提升:PHP7比PHP5.6性能提升了两倍,而且全面支持64位,更重要是修改了之前发现的致命错误,支持更多的类扩展,满意开发的需要,所以PHP7的发布将是未来里程碑的发展。

目前新PHP网站已经不再把PHP5版本作为首先开发版本,默认开发版本页是推荐PHP7以上版本,而且有更多的旧网站已经升级到PHP7以上。

虽然PHP7已经发布有四年之久,但是并没有在更短时间内能超过PHP5版本,主要原因是PHP5版本系列已经发布许久,而且是当时最优秀的版本,从PHP6发布开始,PHP5并没有被直接淘汰,PHP6出来之后PHP5.7更加受到开发者珍惜,PHP5.7系列的有PHP所有完整功能,所以PHP7从性能上弥补PHP5的不足。

所以未来PHP7版本将是PHP又一次重要的改革,我相信未来很长一段时间很难改变PHP7的地位。

展开
收起

php基础里面的工厂设计模式

各位朋友大家好!

今天给大家带来的是 php基础里面的工厂设计模式!

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动。

这里那就需要运用到一个 工厂设计模式的PHP类!

由于源码比较长,需要的朋友可以私聊小编哦

废话不多说,上源码!

<?php

//人类接口

interface IHuman

{

function GetName();

}

//男人类,实现人类接口

class ManClass implements IHuman

{

//获取姓名方法

public function GetName()

{

return "I'm man."."<br>";

}

}

//女人类,实现人类接口

class WomanClass implements IHuman

{

//获取姓名方法

public function GetName()

{

return "I'm Woman."."<br>";

}

}

//类工厂,根据需要生产不同实例对象返回

class ManFactory

{

//根据参数获取实例对象

public function GetIHuman($IHuman="man")

{

if($IHuman=="woman")

{

return new WomanClass();

}

else if($IHuman=="man")

{

return new ManClass();

}

else

{

return null;

}

}

//直接获取woman类

public function GetWoman()

{

return new WomanClass();

//return new ManClass();

}

//直接获取man类

public function GetMan()

{

return new ManClass();

}

}

$ManFactory=new ManFactory();

$ManClass=$ManFactory->GetIHuman();

echo $ManClass->GetName();

$IHuman=$ManFactory->GetIHuman("woman");

echo $IHuman->GetName();

$Woman=$ManFactory->GetWoman();

echo $Woman->GetName();

$Man=$ManFactory->GetMan();

echo $Man->GetName();

?>

展开
收起

php str-ireplace()函数替换字符串/数组中的一些字符

str_ireplace()函数定义及用法

在php中,str_ireplace()函数是使用来替换字符串或数组中的一些字符(不区分大小写),返回替换后的新字符串或数组,原字符串或数组不变;

str_ireplace()函数如果处理的数据是一个数组:该函数将对数组中的每个元素进行查找和替换,并返回替换后的新数组,原数组是不变的;如果用来替换的也是一个数组,而其元素少于被替换(搜索到的)的元素的数量,那么多余的元素将用空字符串进行替换;

str_ireplace()函数是不区分大小写的,如果需要区分大小写,请使用str_replace()函数来处理;

str_ireplace()函数有四个参数,第一个参数是字符串或数组,用来规定要替换的字符串;第二个参数可以是字符串和数组,用来规定替换的字符串;第三个参数也可以是字符串或数组,用来规定需要处理的字符串或数组;第四个参数是PHP 5.0版本中新增的可选参数,是一个变量,用来对替换数进行计数;

str_ireplace()函数语法格式

$newStr = str_ireplace(find,replace,string,count);

参数说明

find:可以是数组或字符串,规定要替换的字符串;replace:可以是数组或字符串,规定用来替换的字符串;string:规定需要处理的字符串;count:一个变量,对替换数进行计数,是PHP 5.0版本中新增的可选参数;实例1:

<?php

header("content-type:text/html;charset=utf-8");//设置编码,解决中文乱码

$string = "hello word!"; //字符串

$newStr = str_ireplace("hello","你好",$string,$count);//用"你好"替换字符串中的"hello"

echo '原字符串:'.$string."<br/>";//输出原字符串

echo '替换后的字符串:'.$newStr."<br/>";//输出处理后的字符串

echo '替换数:'.$count."<br/>";

?>

运行结果:

str_ireplace()函数实例图1

实例2:

<?php

header("content-type:text/html;charset=utf-8");//设置编码,解决中文乱码

$arr = array("a4","a2","a4"); //字符串

$newArr = str_ireplace("a4","a1",$arr,$count);//用"a1"替换数组中的"a4"

echo '原字符串:'.$arr."<br/>";//输出原字符串

echo '替换后的数组:';

var_dump($newArr);//输出处理后的数组

echo '替换数:'.$count."<br/>";

?>

运行结果:

str_ireplace()函数实例图2

实例3:

<?php

header("content-type:text/html;charset=utf-8");//设置编码,解决中文乱码

$arr = array("a4","a2","a5"); //字符串

$newArr = str_ireplace(array("a4","a5"),array("a1","a3"),$arr,$count);

echo '原数组:';

var_dump($arr);//输出原数组

echo '替换后的数组:';

var_dump($newArr);//输出处理后的数组

echo '替换数:'.$count."<br/>";

?>

运行结果:

str_ireplace()函数实例图3

展开
收起

PHP中解决跨域访问

PHP跨域访问

PHP是通过 header() 来设置Header头部来解决客户端的跨域问题的。1、允许单个域名访问指定某域名(a)跨域访问域名(z),则只需在b文件头部添加如下代码:<?phpheader('Access-Control-Allow-Origin:a');2、允许多个域名访问指定多个域名(a、b等)跨域访问(z),则只需在域名z项目的入口文件头部添加如下代码:<?php$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array( 'a', 'b' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); }3、允许所有域名访问允许所有域名访问,则只需在域名(z)文件头部添加如下代码:<?phpheader('Access-Control-Allow-Origin:*');4、设置Preflight Request(预检请求)中,将会在正式请求的 Access-Control-Expose-Headers 字段中出现的首部信息<?phpheader("Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept,Authorization");5、设置允许跨域请求的方法<?phpheader('Access-Control-Allow-Methods:GET,HEAD,POST,PATCH,PUT,OPTIONS,DELETE,CONNECT,TRACE');

6、Tips

请注意 header() 必须在任何实际输出之前调用,不管是普通的 HTML 标签,还是文件或 PHP 输出的空行,空格。这是个常见的错误,在通过include,require,或者其访问其他文件里面的函数的时候,如果在header()被调用之前,其中有空格或者空行。 同样的问题也存在于单独的 PHP/HTML 文件中。

设置中的选项值,有的并未给全,更多资料,详见【MDN WEB DOCS】

展开
收起

PHP类中成员方法

实例属性和静态属性

class 类名{

var $属性名1 = 值1; //定义实例属性,有初值

var $属性名2 ; //定义实例属性,无初值;

static $属性名3 = 值3; //定义静态属性,有初值

static $属性名4 ; //定义静态属性,无初值;

//其实,是静态属性,是在属性名前面加上“static”关键字

}

实例属性:

它是“隶属于”对象的属性;

每new(实例化)一个对象,则该对象上就具有了该实例属性。

使用形式:

$对象->实例属性名;

可见,实例属性,是通过对象来使用它;

静态属性:

它是“隶属于”该类本身——而不隶属于对象。

即使new很多个对象,也只有一个该属性——即只能保存一份数据;

使用形式:

类名::$静态属性名;

可见:静态属性,是通过类来使用它;

实例方法和静态方法

实例方法:

定义形式:

function 方法名(形参1,形参2,...) { ..... }

使用形式:

$对象->方法名(实参1,实参2,....);

实例方法也是“隶属于”对象;

不过,因为方法不是“容器”,不是“数据”,而是一段可执行的代码;

注意:多个不同的对象,调用一个共同的方法,也只是调用而已,并不像实例属性一样,区分“你的”还是“我的”

静态方法:

定义形式:

static function 方法名(形参1,形参2,...) { ..... }

使用形式:

类名::方法名(实参1,实参2,....);

静态方法也是“隶属于”类;

展开
收起

PHP中&符号的神秘用处

官方说明:

在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针:例如你不能对他们做指针运算,他们并不是实际的内存地址。替代的是,引用是符号表别名。注意在PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的硬链接。

&:表示引用,在变量或者函数、对象等前面加上该符号

&符号使用场景

变量引用

引用允许用两个变量来指向同一个内容

变量引用

函数引用传递(传址调用)

可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值

函数引用传递

函数引用返回

引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!

函数引用返回

对象引用

在PHP5以上,对象的 = 赋值和传递都是引用。要想实现拷贝副本,需要通过clone函数进行处理。

PHP中对象的深拷贝,指的是拷贝对象副本,也就是用clone函数拷贝出一个完全一样的对象,修改该对象,并不会影响原始对象;

PHP中对象的浅拷贝,指的是对象进行引用赋值,其中一个改变,另一个也随之改变。

对象引用

引用取消

使用unset(),unset 一个引用,只是断开了变量名和变量内容之间的绑定。(这并不意味着变量内容被销毁了)

展开
收起

PHP中“|”和“||”的简单比较

在PHP中“|”和“||”都是OR(或)运算符,那么它们之间有什么区别?下面本篇文章就来带大家认识一下运算符“|”和“||”,对它们进行简单比较,了解它们之间的区别。

运算符“|”

它是一个按位OR运算符,二元运算符;它对变量的位进行操作。如果有两个变量a,b,进行$a | $b;则是将把 $a 和 $b 中任何一个为 1 的位设为 1。

示例:

$a = 3; $b = 10; echo $a | $b; ?>

输出:

说明:

在上面的示例中,给定两个值,a = 3和b = 10;然后将这两个数字转换为二进制数,即a = 0011和b = 1010;最后应用OR(|)运算并计算$a | $b的值。

运算符“||”

这是一个逻辑OR运算符,布尔运算符;它对变量的布尔值进行操作。如果其中任何一个变量的布尔值为true,则$a || $b的值为1。

示例:

$a = 3; $b = 10; echo $a||$b; echo ''; if($a = 3 || $b = 0) echo '1'; else echo '0'; ?>

输出:

说明:

在上面的示例中,给定两个值,a = 3和b =10;因此变量a和变量b的布尔值都为true,则$a||$b的值为1;在if语句中,检查其中一个条件是否为真,因为变量a值被设置为3,布尔为true,因此执行“$a = 3 || $b = 0”的值为1。

以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!

展开
收起