导航:首页 > 编程语言 > xorphp

xorphp

发布时间:2023-01-12 17:27:44

php中字符变量 异或 '1'^'2' 的值

<?php
echo(1^2)." ";
echo('123'^'ACE')." ";
?>

你猜猜这个执行结果是什么?

在PHP里面,整数进行位运算的结果和C语言是相同的,这个你明白,我不多说。但是PHP的位运算更高级,如果左右参数都是字符串,则位运算符将操作字符的 ASCII 值。

㈡ PHP的其他方面

PHP 在数据库方面的丰富支持,也是它迅速走红的原因之一,它支持下列的数据库或是数据文件:
Adabas 、D、 DBA、dBase 、dbm 、filePro 、Informix 、InterBase、mSQL 、Microsoft SQL Server、·MySQL、Solid、Sybase、 Oracle 、PostgreSQL
而在 Internet 上它也支持了相当多的通讯协议 (protocol),包括了与电子邮件相关的 IMAP,POP3;网管系统 SNMP;网络新闻NNTP;帐号共用 NIS;全球信息网 HTTP 及 Apache 服务器;目录协议 LDAP 以及其它网络的相关函数。
除此之外,用 PHP 写出来的 Web 后端 CGI 程序,可以很轻易的移植到不同的操作系统上。例如,先以 linux 架的网站,在系统负荷过高时,可以快速地将整个系统移到 SUN 工作站上,不用重新编译 CGI 程序。面对快速发展的 Internet,这是长期规划的最好选择。
相关语法及概念
php 支持八种原始类型。
四种标量类型:boolean(布尔型) integer(整型) float(浮点型,也作“double”) string(字符串)
两种复合类型:array(数组)object(对象)
最后是两种特殊类型:resource(资源)NULL
为了确保代码的易读性,本手册还介绍了一些伪类型:mixed、number、callback
语法(例子中均忽略了PHP代码边界符 <?php ?>):
注释的语法有三种: //comment这个是单行注释/*comment*/这个是多行注释#comment这个是脚本类型注释,很少用基本的结构控制语句: //分支结构(选择结构)if(condition){//Statement}if(condition){//Statement}else{//Statement}if(condition){//Statement}elseif(condition){//Statement}//多分支结构switch($变量){case'值'://Statementbreak;case'值2'://Statementbreak;default://Statement}//循环结构while(condition){//Statement}do{//Statement}while(condition);for(初始化;判断;变化){//Statement}//数组遍历专用循环语句foreach($Arrayas$value){echo$value;}foreach($Arrayas$key=>$value){echo$key;echo$value;}一个PHP实例: <html><head><title>Firstprogram</title></head><body>//php中string类型的拼接符和其它大多数采用+号运算符不一样,而是采用.号运算//在一般语言中用于对象属性和方法调用的.运算符,则和C语言的结构体一样用=><?phpechohelloworld.!;?></body></html>php对面向对象的支持
面向对象编程的概念:
不同的作者之间说法可能不一样,但是一个OOP语言必须有以下几方面:
1.抽象数据类型和信息封装
2.继承
3.多态
在PHP中是通过类来完成封装的: //在OOP类中,通常采用大双驼峰命名法,每个单词的首字母都大写classSomething{//作用域修饰符:public公共的;private私有的;protected受保护的;//属性的名称一般用全小写private$x=null;//在编程建议中,内部使用的属性应该给私有修饰符,然后通过方法取值赋值//方法的名称一般用小驼峰命名法,第一个单词全小写,剩下的单词首字母大写//因为PHP不会自动为变量使用$this所以必须主动加上$this伪变量来指向操作的对象publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}}当然你可以按自己的喜好进行定义,但最好保持一种标准,这样会更有效。数据成员在类中使用var声明来定义,在给数据成员赋值之前,它们是没有类型的。一个数据成员可以是一个整数,一个数组,一个相关数组(associative array)或者是一个对象。方法在类中被定义成函数形式,在方法中访问类成员变量时,你应该使用$this->name,否则对一个方法来说,它只能是局部变量。
使用new操作符来创建一个对象: $obj=newSomething;然后你可以使用成员函数通过: $obj->setX(5);$see=$obj->getX();echo$see;在这个例子中,setX成员函数将5赋值给对象的成员变量x(不是类的),然后getX返回它的值5。可以象:$obj->x=6那样通过类引用方式来存取数据成员,这不是一个很好的OOP习惯。我强烈建议通过方法来存取成员变量。如果你把成员变量看成是不可处理的,并且只通过对象句柄来使用方法,你将是一个好的OOP程序员。不幸的是,PHP不支持声明私有成员变量,所以不良代码在PHP中也是允许的。继承在PHP中很容易实现,只要使用extends关键字。 classAnotherextendsSomething{private$y;publicfunctionsetY($v){$this->y=$v;}functiongetY(){return$this->y;}}Another类的对象拥有了父类(Something)的全部的数据成员及方法,而且还加上了自己的数据成员和方法。
你可以使用 $obj2=newAnother;$obj2->setY(5);echo$obj2->getY();PHP只支持单继承,所以你不能从两个或两个以上类派生出新的类来。你可以在派生类中重定义一个方法,如果我们在Another类中重定义了getX方法(方法重写),我们就不能使 用Something中的getX方法了。如果你在派生类中声明了一个与基派同名的数据成员,那么当你处理它时, 它将“隐藏”基类的数据成员。
你可以在你的类中定义构造函数。构造函数是一个与类名同名的方法,当你创建一个类的对象时会被调用,例如: classSomething{private$x=null;//新版本的构造函数放弃使用类名,而统一使用__construct()publicfunction__construct($x){$this->x=$x;}publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}//析构函数publicfunction__destruct(){}}所以你可以创建一个对象,通过: $obj=newSomething(6);构造函数会自动地把6赋值给数据变量x。构造函数和方法都是普通的PHP函数(”__“两个下划线,魔术方法),所以你可以使用缺省参数。 publicfunction__construct($x=3,$y=5){}接着: $obj=newSomething();//x=3andy=5$obj=newSomething(8);//x=8andy=5$obj=newSomething(8,9);//x=8andy=9缺省参数使用C++的方式,所以你不能忽略Y的值,而给X一个缺省参数,参数是从左到右赋值的,如果传入的参数少于要求的参数时,其作的将使用缺省参数。
当一个派生类的对象被创建时,只有它的构造函数被调用,父类的构造函数没被调用,如果你想调用基类的构造函数,你必须要在派生类的构造函数中用parent::__construct()调用。可以这样做是在派生类中所有父类的方法都是可用的。 classAnotherextendsSomething{publicfunction__construct(){parent::__construct(5,6);//显示调用基类构造函数}}OOP的一个很好的机制是使用抽象类。抽象类是不能实例化,只能提供给派生类一个接口。设计者通常使用抽象类来强迫程序员从基类派生,这样可以确保新的类包含一些期待的功能。在PHP中没有标准的方法,但是:如果你需要这个特性,可以通过定义基类,并在它的构造函数后加上die 的调用,这样就可以保证基类是不可实例化的,在每一个方法(接口)后面加上die 语句,所以,如果一个程序员在派生类中没有覆盖方法,将引发一个错误。而且因为PHP 是无类型的,你可能需要确认一个对象是来自于你的基类的派生类,那么在基类中增加一个方法来实义类的身份(返回某种标识id),并且在你接收到一个对象参数时校验这个值。当然,如果一个不好的邪恶程序员在派生类中覆盖了这个方法,这种方法就不起作用了,不过一般问题多在懒惰的程序员身上,而不是邪恶的程序员。
当然,能够让基类对程序员无法看到是很好的,只要将接口打印出来做他们的工作就可以了。PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
重载(与覆盖不同)在PHP中不支持,因为PHP是弱类型语言。在OOP中,你可以重载一个方法来实现两个或重多的方法具有相同的名字,但是有不同数量或类型的参数(这要看语言)。PHP 是一种松散类型的语言,所以通过类型重载不起作用,然而通过参数的个数不同来重载也不起作用。
有时在OOP中重载构造函数非常好,这样你可以通过不同的方法创建对象(变量函数)。在PHP中实现它的技巧是: classMyclass{publicfunctionMyclass(){$name=Myclass.func_num_args();//这个函数返回的是传过来参数的个数$this->$name();//这里使用的是一个变量函数,以这个变量的值作为函数的名称调用}publicfunctionMyclass1($x){//code}publicfunctionMyclass2($x,$y){//code}}通过在类中的额外的处理,使用这个类对用户是透明的: $obj1=newMyclass('1');//将调用Myclass1$obj2=newMyclass('1','2');//将调用Myclass2有时这个非常好用。
多态
多态是对象的一种能力,它可以在运行时刻根据传递的对象参数,决定调用哪一个对象的方法。例如,如果你有一个figure的类,它定义了一个draw的方法。并且派生了circle和rectangle 类,在派生类中你覆盖了draw方法,你可能还有一个函数,它希望使用一个参数x,并且可以调用$x->draw()。如果你有多态性,调用哪个draw方法就依赖于你传递给这个函数的对象类型。
多态性在象PHP这样的解释语言(想象一下一个C++编译器生成这样的代码,你应该调用哪一个方法?你也不知道你拥有的对象是什么类型的,好,这不是重点)是非常容易和自然的。所以PHP当然支持多态性。 classCalc{functionniceDrawing($x){//假设这是Board类的一个方法$x->draw();}}classCircle{publicfunctiondraw(){echo画了一个圆;}}classRectangle{publicfunctiondraw(){echo画了一个矩形;}}$board=newCalc;$obj=newCircle(3,187);$obj2=newRectangle(4,5);$board->niceDrawing($obj);//将调用Circle的draw方法$board->niceDrawing($obj2);//将调用Rectangle的draw方法用PHP进行面向对象编程
一些纯化论者(purists)可能会说PHP不是一个真正的面向对象的语言,这是事实。PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能想/需要在PHP 中使用纯的OOP去声明类,而且在你的项目只用对象和类。
随着项目越来越大,使用OOP可能会有帮助,OOP代码很容易维护,容易理解和重用。这些就是软件工程的基础。在基于web的项目中应用这些概念就成为将来网站成功的关键。
高级OOP技术
在看过基本的OOP概念后,我就可以向你展示更高级的技术:
序列化(Serializing)
PHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而且可以在以后装入对象。这就是所谓的序列化机制。PHP 拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示。然而,序列化只保存了对象的成员数据而不包括方法。
在PHP4中,如果你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象到$obj,你可以继续使用对象的方法!我不建议这样去做,因为(a)文档中没有保证这种行为在以后的版本中仍然可以使用。(b) 这个可能导致一种误解,在你把一个序列化后的版本保存到磁盘并退出脚本时。当以后运行这个脚本时,你不能期待着在反序列化一个对象时,对象的方法也会在那里,因为字符串表示根本就不包括方法。
总而言之,PHP 进行序列化对于保存对象的成员变量非常有用。(你也可以将相关数组和数组序列化到一个文件中)。
例子 : $obj=newClassfoo();$str=serialize($obj);//保存$str到磁盘上$obj2=unserialize($str);//几个月以后//从磁盘中装入str你恢复了成员数据,但是不包括方法(根据文档所说)。这导致了只能通过类似于使用$obj2->x来存取成员变量(你没有别的方法!)的唯一办法,所以不要在家里试它。
有一些办法可以解决这个问题,我把它留着,因为对这篇简洁的文章来说,他们太不好。我会很高兴地欢迎在PHP的后续版本中有全序列化的特性。
使用类进行数据存储PHP和OOP一件非常好的事情就是,你可以很容易地定义一个类来操作某件事情,并且无论何时你想用的时候都可以调用相应的类。假设你有一个HTML表单,用户可以通过选择产品ID号来选择一个产品。在数据库中有产品的信息,你想把产品显示出来,显示它的价格等等。你拥有不同类型的产品,并且同一个动作可能对不同的产品具有不同的意思。例如,显示一个声音可能意味着播放它,但是对于其它种类的产品可能意味着显示一个存在数据库中的图片。你可以使用OOP或PHP来减少编码并提高质量:
定义一个产品的类,定义它应该有的方法(例如:显示),然后定义对每一种类型的产品的类,从产品类派后出来(SoundItem类,ViewableItem类,等等),覆盖在产品类中的方法,使它们按你的想法动作。
根据数据库中每一种产品的类型(type)字段给类命名,一个典型的产品表可能有(id,type,price,description,等等字段)...然后在处理脚本中,你可以从数据库中取出type值,然后实例化一个名为type的对象: $obj=new$type();$obj->action();这是PHP的一个非常好的特性,你可以不用考虑对象的类型,调用$obj的显示方法或其它的方法。使用这个技术,你不需要修改脚本去增加一个新类型的对象,只是增加一个处理它的类。
这个功能很强大,只要定义方法,而不去考虑所有对象的类型,在不同的类中按不同的方法实现它们,然后在主脚本中对任意对象使用它们,没有if...else,也不需要两个程序员,只有高兴。
你同意编程是容易的,维护是便宜的,可重用是真的吗?
如果你管理一组程序员,分配工作就是很简单的了,每个人可能负责一个类型的对象和处理它的类。
可以通过这个技术实现国际化,根据用户所选的语言字段应用相应的类就可以了,等等。
拷贝和克隆
当你创建一个$obj的对象时,你可以通过$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一个引用),所以它具有$obj在当时的状态。有时候,你不想这样,你只是想生成一个象obj类一样的一个新的对象,可以通过使用new语句来调用类的构造函数。在PHP中也可以通过序列化,和一个基类来实现,但所有的其它类都要从基类派生出来。
进入危险区域
当你序列化一个对象,你会得到某种格式的字符串,如果你感兴趣,你可以调究它,其中,字符串中有类的名字(太好了!),你可以把它取出来,象: $herring=serialize($obj);$vec=explode(':',$herring);//以:为标识符把字符串拆分成一个数组$nam=str_replace(,'',$vec[2]);所以假设你创建了一个Universe的类,并且强制所有的类都必须从universe扩展,你可以在universe 中定义一个clone的方法,如下: classUniverse{//在新的PHP版本中克隆(__clone())是一个魔术方法,不要和这个方法搞混了functionclone(){$herring=serialize($this);$vec=explode(':',$herring);$nam=str_replace(,'',$vec[2]);$ret=new$nam;return$ret;}}//然后$obj=newSomething();//从Universe扩展$other=$obj->clone();你所得到的是一个新的Something类的对象,它同使用new方法,调用构造函数创建出的对象一样。我不知道这个对你是否有用,但是Universe类可以知道派生类的名字是一个好的经验。想象是唯一的限制。
模板引擎 Smarty:Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常方便。 Heyes Template Class:一个非常容易使用,但功能强大并且快速的模板引擎,它帮助你把页面布局和设计从代码中分离。 FastTemplate:一个简单的变量插值模板类,它分析你的模板,把变量的值从HTML代码中分离处理。 ShellPage:一个简单易用的类,可以让你的整个网站布局基于模板文件,修改模板就能改变整个站点。 STP Simple Template Parser:一个简单、轻量级并且易于使用的模板分析类。它可以从多个模板中组装一个页面,把结果页面输出到浏览器或者文件系统。 OO Template Class:一个你可以用在自己程序中的面向对象的模板类。 SimpleTemplate:一个可以创建和结构化网站的模板引擎。它可以解析和编译模板。 bTemplate:短小但是快速的模板类,允许你把PHP逻辑代码从HTML修饰代码中分离。 Savant:一个强大且轻量级的PEAR兼容模板系统。它是非编译型的,使用PHP语言本身做为它的模板语言。 ETS - easy template system:可以使用完全相同数据重组模板的模板系统。 EasyTemplatePHP:适用于你的站点的一个简单但是强大的模板系统。 vlibTemplate:一个快速、全能的模板系统,它包含一个缓存和调试类。 AvanTemplate:多字节安全的模板引擎,占用很少系统资源。它支持变量替换,内容块可以设置显示或隐藏 Grafx Software’s Fast Template:一个修改版本的Fast Template系统,它包括缓存功能,调试控制台以及沉默去除为赋值块。 TemplatePower:一个快速、简单、功能强大的模板类。主要功能有嵌套的动态块支持,块/文件包含支持以及显示/隐藏未赋值的变量。 TagTemplate:这个库的功能被设计来使用模板文件,同时允许你从HTML文件检索信息。 htmltmpl: templating engine:一个适用于Python和PHP的模板引擎。它面向希望在项目中分离代码和设计的web应用开发人员。 PHP Class for Parsing Dreamweaver templates:一个分析Dreamweaver模板的简单类,被用于Gallery 2 和WordPress的自定义模块中。 MiniTemplator (Template Engine):针对HTML文件的一个紧凑型模板引擎。对于模板变量和块定义它具有简单的语法。其中块可以嵌套。 Layout Solution:简化网站开发和维护。它拥有常用的变量和页面元素使你不需要重复做页面布局工作。 Cached Fast Template:它已经纳入 FastTemplate ,允许你缓存模板文件,甚至可以在分离的块内容上缓存不同的规格。 TinyButStrong:一个支持MySQL,Odbc,Sql-Server和ADODB的模板引擎。它包含7个方法和两个属性。 Brian Lozier’s php based template engine:只有2K大小,非常快并且是面向对象设计。 WACT:一个从设计中分离代码的模板引擎。 PHPTAL:一个PHP下面的XML/XHTML模板库。 Rong_View_Wudimei:Wudimei开发的国产框架Rong Framework的模板引擎,它类似于smarty,优点是速度快,缺点是模板标签较少,不过够用了。 框架介绍thinkphp
ThinkPHP是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。
PHP认证级别
PHP课程由初级(IFE)、中级(IPE)和高级(IAE)三个部分。 IFE即Index Front-end Engineer的缩写,指数前端工程师的意思。 IPE即 Index PHP Engineer 的缩写,意思是指数PHP工程师。 IAE即 Index architecture/advanced engineer 的缩写,意思是:指数高级/架构工程师。 PHP安全
PHP其实不过是Web服务器的一个模块功能,所以首先要保证Web服务器的安全。当然Web服务器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽。常见的web安全漏洞有:注入攻击,跨站攻击,服务器自身漏洞等,对应的详细解释,详见:扩展阅读中的《WEB安全性-2010_OWASP_TOP10》,这里有很详尽的解释。
PHP的优点学习过程和方法
PHP的语法类似于C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。你只需要很短的时间内将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。
数据库连接
PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是绝佳的组合,如果再加上Apache服务器,就是相当完美的了。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。
可扩展性
就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。
PHP可伸缩性
传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。
PHP免费安装
PHP源代码包安装版:这个版本适合已经有自己独立的网站域名、网站空间的专业网站建设用户。使用方法依然其为简单,只需三步:
第一、到官方网站:下载 PHP源代码包安装版最新版本,解压下载文件,将其中的全部内容上传到你的支持PHP的网站空间
第二、改更文件属性,请将根目录下以PHP为后缀名的文件和”/include/domain.php”和 “/attachments” 和 “/data”文件夹以及文件夹下所有的文件属性改成“可读”、“可写”、“可执行”,通常是“755”。
第三、打开你的网站根目录,系统会自动运行setup安装程序,按提示点下一步操作即可。
友情提示:当你下载我们的软件并看到这份说明时,则说明你一定是对企业网站建设有一定的需求或者你是一个网站建设技术学习者。
文件格式 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 ?>。这是为了防止多余的空格或者其它字符影响到代码。 例如:
$foo = 'foo'; 缩进应该能够反映出代码的逻辑结果,尽量使用四个空格,禁止使用制表符TAB,因为这样能够保证有跨客户端编程器软件的灵活性。 例如: if(1==$x){$indented_code=1;if(1==$new_line){$more_indented_code=1;}}变量赋值建议保持相等间距和排列。 例如: $variable='demo';$var='demo2';每行代码长度应控制在80个字符以内,最长不超过120个字符。因为 linux 读入文件一般以80列为单位,就是说如果一行代码超过80个字符,那么系统将为此付出额外操作指令。这个虽然看起来是小问题,但是对于追求完美的程序员来说也是值得注意并遵守的规范。 每行结尾不允许有多余的空格。 Php文件记事本编辑乱码问题
一般情况下,记事本编辑器在对文件进行完编辑并保存之时,其默认编码为ANSI,中文。然则更多的时候,php在语言环境设置时语言多数为utf-8,直接保存并用于apache等http-server解析后就会出现乱码。
为此,应该注意在用记事本编辑完后可将文件用“另存为”的方式对文件进行保存,并将“文件类型”选择“所有文件”,编码与文件指定语言编码一致即可。
算数运算符
PHP 的运算符包括算术运算符、赋值运算符、比较运算符和逻辑运算符。
算数运算符:
加,减,乘,除,取模(取余)+、-、*、/、%
赋值运算符:(以下解释在许多书中有所不同)
赋值,加赋值,减赋值、乘赋值、除赋值,连字赋值
=、+=、-=、*=、/=、.=
位运算符:
位与、位或、位亦或、位非、左移、右移
&、|、^、~、<<、>>
比较运算符:
等于、全等于、不等于、不全等于、大于、小于、大于等于、小于等于
==、===、!=(<>)、!==、>、<、>=、<=
逻辑运算符:
逻辑与、逻辑或、逻辑非、逻辑亦或
&&、||、!、xor
字符串运算符:
. 连接两个字符串

㈢ 请问php中xor 是什么意思

逻辑异或 一个为真者 真 ,全真或者全假 为 假

㈣ php运算符优先级问题之短路现象的原理是什么

下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
运算符优先级

结合方向
运算符
附加信息

无 clone new clone 和 new
左 [ array()
右 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ 类型和递增/递减
无 instanceof 类型
右 ! 逻辑运算符
左 * / % 算术运算符
左 + - . 算术运算符和字符串运算符
左 << >> 位运算符
无 == != === !== <> 比较运算符
左 & 位运算符和引用
左 ^ 位运算符
左 | 位运算符
左 && 逻辑运算符
左 || 逻辑运算符
左 ? : 三元运算符
右 = += -= *= /= .= %= &= |= ^= <<= >>= => 赋值运算符
左 and 逻辑运算符
左 xor 逻辑运算符
左 or 逻辑运算符
左 , 多处用到
对具有相同优先级的运算符,左结合方向意味着将从左向右求值,右结合方向则反之。对于无结合方向具有相同优先级的运算符,该运算符有可能无法与其自身结合。

㈤ php小白 请问与 或 异或 取反是什么意思

这些是数学逻辑运算,并不是PHP才有,这里涉及到一个布尔型数据类型的含义(真则为1,假则为0)
举个例子,假设有条件a和条件b
与关系:变量$c = $a &&$ b,只有$a与$b两个条件都满足时($a为真,判断结果等于1;且$b为真,判断结果等于1),c才为真($c = 1),否则c为假($c = 0)
或关系:变量$c = $a ||$ b,只要$a或者$b有其中一个满足时($a真$b假,$a假$b真,$a真$b真),$c为真
异或关系:变量$c = $a ^ $b,只要$a、$b条件判断结果不同($a真$b假,$a假$b真),则$c为真
取反:$c = !$a,当条件$a为真($a = 1)则$c = 0;$a为假($a = 0)则$c = 1;

㈥ php代码提示:Parse error: syntax error, unexpected T_LOGICAL_XOR, expecting T_STRING

function XOR($str1,$str2) {
$temp1=Array();
$temp2=Array();
$hex = "";
if (strlen($str1)!= strlen($str2)) {
echo "异或数据长度不等";
}
for ($i = 0; $i < strlen($str1); $i++) {
$temp1[]=substr($str1,$i,1); //将单个字符存到数组当中------------改动
$temp2[]=substr($str2,$i,1); //将单个字符存到数组当中-----------改动
//$temp1[$i];

$hex = $hex+ strToHex($temp1[$i] ^ $temp2[$i]);
}
return strtoupper($hex);
}
看看这样还报错吗
希望对你有用,望采纳

㈦ php中赋值运算符有哪些

㈧ PHP语言PHP语言里的位运算符&、|、^ 、~、〈〈 、〉〉这些符号我一个也不懂,希望高手给个全面的解释!拜

"&" 按位与运算
按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。

例如:9&5可写算式如下:

00001001 (9的二进制补码)

&00000101 (5的二进制补码)

00000001 (1的二进制补码)

<?php
$a = 9;
$b = 5;
echo sprintf("%b", $a&$b);
?>

"|" 按位或运算
按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

例如:9|5可写算式如下:

00001001

|00000101

00001101 (十进制为13)可见9|5=13

<?php
$a = 9;
$b = 5;
echo sprintf("%b", $a|$b)."\n"; //二进制
echo sprintf("%d", $a|$b)."\n"; //十进制

"^" 按位异或运算
按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:

00001001

^00000101

00001100 (十进制为12)

<?php
$a = 9;
$b = 5;
echo sprintf("%b", $a^$b)."\n"; //二进制
echo sprintf("%d", $a^$b)."\n"; //十进制

"~" 求反运算
求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。

例如~9的运算为:

~(0000000000001001)结果为:1111111111110110

<?php
$a = 9;
$b = 5;
echo sprintf("%b", ~$a)."\n"; //二进制

"〈〈" 左移运算
左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。

例如:

a<<4

指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

<?php
$a = 3;
$temp = $a<<4;
echo sprintf("%d", $temp)."\n"; //十进制

“>>” 右移运算
右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

例如:

设 a=48,

a>>4

表示把00110000右移为00000011(十进制3)。

应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定

<?php
$a = 48;
$temp = $a>>4;
echo sprintf("%d", $temp)."\n"; //十进制

㈨ PHP入门基础教程

PHP入门基础教程大全

PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。后来又用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。为帮助大家入门学习php,我为大家分享PHP入门知识教程如下:

1、嵌入方法:

类似ASP的<%,PHP可以是<?php或者是<?,结束符号是?>,当然您也可以自己指定。

2、引用文件:

引用文件的方法有两种:require 及 include。

require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

3、注释方法:

<?php

echo "这是第一种例子。 " ; // 本例是 C++ 语法的注释 (PHP的注释跟C差不多!)

/* 本例采用多行的

注释方式 */

echo "这是第二种例子。 " ;

echo "这是第三种例子。 " ; # 本例使用 UNIX Shell 语法注释

?>

4、变量类型:

$mystring = "我是字符串" ;

$NewLine = "换行了 " ;

$int1 = 38 ;

$float1 = 1.732 ;

$float2 = 1.4E+2 ;

$MyArray1 = array( "子" , "丑" , "寅" , "卯" );

这里引出两个问题,首先PHP变量以$开头,第二PHP语句以;结尾,可能ASP程序员会不适应。这两个遗漏也是程序上大多错误所在。

5、运算符号:

数**非法字眼已被屏蔽**算:

符号 意义

+ 加法运算

- 减法运算

* 乘法运算

/ 除法运算

% 取余数

++ 累加

-- 递减

字符串运算:

运算符号只有一个,就是英文的句号。它可以将字符串连接起来,变成合并的新字符串。类似ASP中的&

<?

$a = "PHP 4" ;

$b = "功能强大" ;

echo $a.$b;

?>

这里也引出两个问题,首先PHP中输出语句是echo,第二类似ASP中的<%=变量%>,PHP中也可以<?=变量?>。

逻辑运算:

符号 意义

< 小于

> 大于

<= 小于或等于

>= 大于或等于

== 等于

!= 不等于

&& 而且 (And)

and 而且 (And)

或者 (Or)

or 或者 (Or)

xor 异或 (Xor)

! 不 (Not)

学习目的:掌握php的流程控制

1、if..else 循环有三种结构

第一种是只有用到 if 条件,当作单纯的判断。解释成 "若发生了某事则怎样处理"。语法如下:

if (expr) { statement }

其中的 expr 为判断的条件,通常都是用逻辑运算符号当判断的条件。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。

范例:本例省略大括号。

<?php

if ($state==1)echo "哈哈" ;

?>

这里特别注意的是,判断是否相等是==而不是=,ASP程序员可能常犯这个错误,= 是赋值。

范例:本例的执行部分有三行,不可省略大括号。

<?php

if ($state==1) {

echo "哈哈 ;

echo "<br>" ;

}

?>

第两种是除了 if 之外,加上了 else 的条件,可解释成 "若发生了某事则怎样处理,否则该如何解决"。语法如下

if (expr) { statement1 } else { statement2 } 范例:上面的例子来修改成更完整的处理。其中的 else 由于只有一行执行的指令,因此不用加上大括号。

<?php

if ($state==1) {

echo "哈哈" ;

echo "<br>";

}

else{

echo "呵呵";

echo "<br>";

}

?>

第三种就是递归的 if..else 循环,通常用在多种决策判断时。它将数个 if..else 拿来合并运用处理。

直接看下面的例子

<?php

if ( $a > $b ) {

echo "a 比 b 大" ;

} elseif ( $a == $b ) {

echo "a 等于 b" ;

} else {

echo "a 比 b 小" ;

}

?>

上例只用二层的 if..else 循环,用来比较 a 和 b 两个变量。实际要使用这种递归 if..else 循环时,请小心使用,因为太多层的循环容易使设计的逻辑出问题,或者少打了大括号等,都会造成程序出现莫名其妙的问题。

2、 for 循环就单纯只有一种,没有变化,它的语法如下

for (expr1; expr2; expr3) { statement }

其中的 expr1 为条件的`初始值。expr2 为判断的条件,通常都是用逻辑运算符号 (logical operators) 当判断的条件。expr3 为执行 statement 后要执行的部份,用来改变条件,供下次的循环判断,如加一..等等。而 statement 为符合条件的执行部分程序,若程序只有一行,可以省略大括号 {}。

下例是用 for 循环写的的例子。

<?php

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

echo "这是第".$i."次循环<br>" ;

}

?>

3、 switch 循环,通常处理复合式的条件判断,每个子条件,都是 case 指令部分。在实作上若使用许多类似的 if 指令,可以将它综合成 switch 循环。

语法如下

switch (expr) { case expr1: statement1; break; case expr2: statement2; break; default: statementN; break; }

其中的 expr 条件,通常为变量名称。而 case 后的 exprN,通常表示变量值。冒号后则为符合该条件要执行的部分。注意要用 break 跳离循环。

<?php

switch ( date ( "D" )) {

case "Mon" :

echo "今天星期一" ;

break;

case "Tue" :

echo "今天星期二" ;

break;

case "Wed" :

echo "今天星期三" ;

break;

case "Thu" :

echo "今天星期四" ;

break;

case "Fri" :

echo "今天星期五" ;

break;

default:

echo "今天放假" ;

break;

}

?>

这里需要注意的是break;别遗漏了,default,省略是可以的。

很明显的,上述的例子用 if 循环就很麻烦了。当然在设计时,要将出现机率最大的条件放在最前面,最少出现的条件放在最后面,可以增加程序的执行效率。上例由于每天出现的机率相同,所以不用注意条件的顺序。

学会构建数据库

在PHP中,MY SQL的命令行编辑可能会令初学者感到很麻烦,不要紧,你下载一个PHPMYADMIN安装一下,以后建立编辑数据库可以靠它了。

下面说一下它的使用。

进入了phpmyadmin后,我们首先需要建立一个数据库,

Language (*) 这里选择中文简体,然后在左边的 创建一个新的数据库 这里填写数据库名字,点击创建即可。

然后在左边下拉菜单中选择那个已经创建的数据库。在下面的

在数据库 shop 中创建一个新表 :

名字 :

字段数 :

中填写表名字和大致你认为的字段数(不够或者多了都不要紧,以后可以再添加或者缺省),按执行。

然后就可以开始建立表了。

第一栏是字段的名字;第二栏选择字段类型:

我们常用的是以下几个:

1)VARCHAR,文本类型

2)INT,整数类型

3)FLOAT,浮点数类型

4)DATE,日期型

5)大家或许会问,自动添加的ID在哪里?这个只要选择INT类型,在后面的额外中选择 auto_increment 就可以了。

建立了表以后,可以在左边看到你建立的表,点击以后,你可以:

1)按右边的结构:查看修改表结构

2)按右边的浏览:查看表中的数据

3)按右边的SQL:运行SQL语句

4)按右边的插入:插入一行记录

5)按右边的清空:删除表中所有记录

6)按右边的删除:删除表

还有一个很重要的功能就是导入和导出,当我们本机做好了程序和数据库的时候,需要在服务器上也有一个本地镜像,如果是ASP的ACCESS简单了,直接上传MDB文件即可,如果是SQL SERVER也可以连接远端服务器进行导入。那么MY SQL中你可以导出所有的SQL语句,到了远端服务器的PHPMYADMIN上,创建数据库后按SQL,粘帖你刚才复制下来的所有本级生成的SQL语句即可。

学会连接数据库

PHP简直就是一个函数库,丰富的函数使PHP的某些地方相当简单。建议大家down一本PHP的函数手册,总用的到。

我这里就简单说一下连接MYSQL数据库。

1、mysql_connect

打开 MySQL 服务器连接。

语法: int mysql_connect(string [hostname] [:port], string [username], string [password]); 返回值: 整数

本函数建立与 MySQL 服务器的连接。其中所有的参数都可省略。当使用本函数却不加任何参数时,参数 hostname 的默认值为 localhost、参数 username 的默认值为 PHP 执行行程的拥有者、参数 password 则为空字符串 (即没有密码)。而参数 hostname 后面可以加冒号与端口号,代表使用哪个端口与 MySQL 连接。当然在使用数据库时,早点使用 mysql_close() 将连接关掉可以节省资源。

2、 mysql_select_db

选择一个数据库。

语法: int mysql_select_db(string database_name, int [link_identifier]); 返回值: 整数

本函数选择 MySQL 服务器中的数据库以供之后的资料查询作业 (query) 处理。成功返回 true,失败则返回 false。

最简单的例子就是:

$conn=mysql_connect ("127.0.0.1", "", "");

mysql_select_db("shop");

连接机MY SQL数据库,打开SHOP数据库。在实际应用中应当加强点错误判断。

学会读取数据

先看两个函数:

1、mysql_query

送出一个 query 字符串。 语法: int mysql_query(string query, int [link_identifier]); 返回值: 整数

本函数送出 query 字符串供 MySQL 做相关的处理或者执行。若没有指定 link_identifier 参数,则程序会自动寻找最近打开的 ID。当 query 查询字符串是 UPDATE、INSERT 及 DELETE 时,返回的可能是 true 或者 false;查询的字符串是 SELECT 则返回新的 ID 值,当返回 false 时,并不是执行成功但无返回值,而是查询的字符串有错误。

2、mysql_fetch_object 返回类资料。 语法: object mysql_fetch_object(int result, int [result_typ]); 返回值: 类

本函数用来将查询结果 result 拆到类变量中。若 result 没有资料,则返回 false 值。

看一个简单的例子:

<?

$exec="select * from user";

$result=mysql_query($exec);

while($rs=mysql_fetch_object($result))

{

echo "username:".$rs->username."<br>";

}

?>

当然,表user中有一个username的字段,这就类似asp中的

<%

exec="select * from user"

set rs=server.createobject("adodb.recordset")

rs.open exec,conn,1,1

do while not rs.eof

response.write "username:"&rs("username")&"<br>"

rs.movenext

loop

%>

当然先要连接数据库,一般我们 require_once('conn.php');而conn.php里面就是上一次说的连接数据库的代码。

小小的两条命令可以完成读取数据的工作了

学会添加删除修改数据

mysql_query($exec);

单这个语句就可以执行所有的操作了,不同的就是$exec这个sql语句

添加:$exec="insert into tablename (item1,item2) values ('".$_POST['item1']."',".$_POST['item1'].")";

删除:$exec="delete from tablename where...";

修改:$exec="update tablename set item1='".$_POST['item1']."' where ...";

说到这里就要说一下表单和php变量传递,如果表单中的一个 <input name="item1" type="text" id="item1">

表单以POST提交的,那么处理表单文件就可以用$_POST['item1']得到变量值,同样以GET提交的就是$_GET['item1']

是不是很简单?但是通常$exec会有问题,因为可能您的SQL语句会很长,您会遗漏.连接符,或者'来包围字符型字段。

我们可以注释mysql_query($exec);语句用echo $exec;代替来输出$exec以检查正确性。如果您还不能察觉$exec有什么错误的话,可以复制这个sql语句到phpmyadmin中执行,看看它的出错信息。还有需要注意的是,我们不要使用一些敏感的字符串作为字段名字,否则很可能会出现问题,比如说date什么的。变量的命名,字段的命名遵循一点规律有的时候对自己是一种好处,初学者并不可忽视其重要性。

学会SESSION的使用

SESSION的作用很多,最多用的就是站点内页面间变量传递。

在页面开始我们要session_start();开启SESSION;

然后就可以使用SESSION变量了,比如说要赋值就是:$_SESSION['item']="item1";要得到值就是$item1=$_SESSION['item'];,很简单吧。这里我们可能会使用到一些函数,比如说判断是不是某SESSION变量为空,可以这么写:empty($_SESSION['inum'])返回true or false。

下面综合一下前面所说的我们来看一个登陆程序,判断用户名密码是否正确。

登陆表单是这样:login.php

<table width="100%" height="100%" border="0" align="center" cellpadding="0" cellspacing="0">

<tr>

<form action="checklogin.php" method="post"><td align="center" valign="middle"><table width="400" border="0" cellpadding="5" cellspacing="1" class="tablebg">

<tr class="tdbg">

<td colspan="2"><p align="center">Administrators Login</p></td>

</tr>

<tr class="tdbg">

<td><p align="center">Username</p></td>

<td><p align="center">

<input name="username" type="text" id="username">

</p></td>

</tr>

<tr class="tdbg">

<td><p align="center">Password</p></td>

<td><p align="center">

<input name="password" type="password" id="password">

</p></td>

</tr>

<tr class="tdbg">

<td colspan="2"><p align="center">

<input type="submit" name="Submit" value="Submit">

<input type="reset" name="Submit2" value="Clear">

</p></td>

</tr>

</table></td></form>

</tr>

</table>

处理文件是这样

<?php

require_once('conn.php');

session_start();

$username=$_POST['username'];

$password=$_POST['password'];

$exec="select * from admin where username='".$username."'";

if($result=mysql_query($exec))

{

if($rs=mysql_fetch_object($result))

{

if($rs->password==$password)

{

$_SESSION['adminname']=$username;

header("location:index.php");

}

else

{

echo "<script>alert('Password Check Error!');location.href='login.php';</script>";

}

}

else

{

echo "<script>alert('Username Check Error!');location.href='login.php';</script>";

}

}

else

{

echo "<script>alert('Database Connection Error!');location.href='login.php';</script>";

}

?>

conn.php是这样:

<?php

$conn=mysql_connect ("127.0.0.1", "", "");

mysql_select_db("shop");

?>

由于 $_SESSION['adminname']=$username;我们可以这样写验证是否登陆语句的文件:checkadmin.php

<?php

session_start();

if($_SESSION['adminname']=='')

{

echo "<script>alert('Please Login First');location.href='login.php';</script>";

}

?>

做一个分页显示

关键就是用到了SQL语句中的limit来限定显示的记录从几到几。我们需要一个记录当前页的变量$page,还需要总共的记录数$num

对于$page如果没有我们就让它=0,如果有<0就让它也=0,如果超过了总的页数就让他=总的页数。

$execc="select count(*) from tablename ";

$resultc=mysql_query($execc);

$rsc=mysql_fetch_array($resultc);

$num=$rsc[0];

这样可以得到记录总数

ceil($num/10))如果一页10记录的话,这个就是总的页数

所以可以这么写

if(empty($_GET['page']))

{

$page=0;

}

else

{

$page=$_GET['page'];

if($page<0)$page=0;

if($page>=ceil($num/10))$page=ceil($num/10)-1;//因为page是从0开始的,所以要-1

}

这样$exec可以这么写 $exec="select * from tablename limit ".($page*10).",10";

//一页是10记录的

最后我们需要做的就是几个连接:

<a href="xxx.php?page=0">FirstPage</a>

<a href="xxx.php?page=<?=($page-1)?>">PrevPage</a>

<a href="xxx.php?page=<?=($page+1)?>">NextPage</a>

<a href="xxx.php?page=<?=ceil($num/10)-1?>">LastPage</a>

注意事项

1、注意不要漏了分号

2、注意不要漏了变量前的$

3、使用SESSION的时候注意不要遗漏session_start();

如果发生错误的时候,可以采用以下方法:

1、如果是SQL语句出错,就注释了然后输出SQL语句,注意也要注释调后续的执行SQL语句

2、如果是变量为空,大多是没有传递到位,输出变量检查一下,检查一下表单的id和name

3、如果是数据库连接出错,检查是否正确打开MY SQL和是否遗漏了连接语句

4、注意缩进,排除括号不区配的错误

在做大网站的时候,我的思路是先构建数据库,确定每一个字段的作用,和表之间的关系。然后设计后台界面,从添加数据开始做起,因为添加是否成功可以直接到数据库里面验证,做好了添加再做显示的页面,最后才是两者的结合。一般来说后台就包括添加删除修改和显示,后台没有问题了,前台也没有什么大问题。前台还需要注意安全性和容错还有就是输出格式。

学会用PHP上传文件和发邮件

上传文件表单必须加上 enctype="multipart/form-data"

和 <input type="file" name="file">

下面看一下代码:

$f=&$HTTP_POST_FILES['file'];

$dest_dir='uploads';//设定上传目录

$dest=$dest_dir.'/'.date("ymd")."_".$f['name'];//我这里设置文件名为日期加上文件名避免重复

$r=move_uploaded_file($f['tmp_name'],$dest);

chmod($dest, 0755);//设定上传的文件的属性

上传的文件名为date("ymd")."_".$f['name'] ,可以在以后插入到数据库的时候用到,PHP实际上是把你上传的文件从临时目录移动到指定目录。move_uploaded_file($f['tmp_name'],$dest);这是关键

至于发邮件就更加简单,可以使用mail()函数

mail("收件人地址","主题","正文","From:发件人 Reply-to:发件人的地址");

不过mail()需要服务器的支持,在WINDOWS下还需要配置SMTP服务器,一般来说外面的LINUX空间都行。

好像上传文件和发邮件比ASP简单很多,只要调用函数就可以了。ASP还需要用到服务器的不同组件比如FSO、JMAIL什么的。

;

㈩ php中xor是异或,为什么值的改变不一样

真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。 不同为1,相同为0,如1001加1010等于0011.
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0,这些法则与加法是相同的,只是不带进位。

阅读全文

与xorphp相关的资料

热点内容
异性下载什么app 浏览:678
51单片机程序单步视频 浏览:239
家庭宽带如何连接服务器 浏览:117
汽车高压泵解压 浏览:770
上门正骨用什么app 浏览:758
安卓为什么免费使用 浏览:397
加密货币都有哪些平台 浏览:625
python和matlab难度 浏览:388
python爬虫很难学么 浏览:572
小米解压积木可以组成什么呢 浏览:816
为什么滴滴出行app还能用 浏览:564
怎么升级手机android 浏览:923
php权威编程pdf 浏览:994
扣扣加密技巧 浏览:720
苹果如何创建服务器错误 浏览:497
软考初级程序员大题分值 浏览:475
js压缩视频文件 浏览:580
linux如何通过命令创建文件 浏览:991
应用加密app还能访问应用嘛 浏览:435
安卓怎么用支付宝交违章罚款 浏览:667