手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:php

PHP细节之&&和and

本文来自冰山上的播客:http://xinsync.xju.edu.cn/index.php/archives/4476
还是值得记录一下,虽然效果一样,但正因为优先级的不同,导致结果可能会和预料中的值有偏差,虽然实际应用中不太用得到但,看看还是好的
原文:

PHP中&&和and都是逻辑运算符,且功能也是完全一样的。如果你不了解它俩的区别,你可能会留下很不容易发现的BUG。仔细看下面的代码片段(注释是执行结果):

<?php
$true = TRUE;
$false = FALSE;
$rt1 = $true && $false;//$rt1:FALSE
$rt2 = $true and $false;//$rt2:TRUE

var_dump($rt1);//FALSE
var_dump($rt2);//TRUE
var_dump($true && $false);//FALSE
var_dump($true and $false);//FALSE

这里最让人感到奇怪的就是为什么$rt1成了FALSE,而$rt2却是TRUE。其实这是PHP优先级在作怪。从文档中我们看到,赋值符号”=”的优先级低于逻辑与符号”&&”,但高于逻辑与符号”and”(也就是&& > = > and)。也就是说:

$rt1 = $true && $false;
$rt2 = $true and $false;

在PHP看来其实是:

$rt1 = ($true && $false);
($rt2 = $true) and $false;

这样就容易解释为什么会有那样的结果了。那现在你知道下面两句的结果了吗?

var_dump($rt1 = $true && $false);
var_dump($rt2 = $true and $false);

参考资料:
PHP Operator Precedence
PHP Logical Operators

Tags: php, 语法

phpEd用后感

phpED算是老牌PHPIDE了,几年前用过,这几天重拾起来又是一翻风味。
几年前,PHPED最大的垢病就是不支持中文,每次删中文时,都是不见了一半字符,从那时候起我就基本放弃了。

这两天又有人推荐他,于是我重新下载进行安装。说一下简单的用后感吧。

界面啥的也就不提了,反正几乎所有的IDE都那样,有点不同的是PHPED多了一点HTML控件的快速插入,屏幕右侧的快捷工具栏中有一些比较常用的DB连接、SSH连接、MANUAL手册等,这些还是相对比较方便的。

编辑代码时,如果是PHP和HTML混编,两种代码的颜色还是很分明的。

DEBUG的时候还是需要使用它的dbg listener,并且需要在服务器上使用它自己的dbg的组件,并加入PHP.ini,才可以进行调试。
启动速度的话,不能算快,但是ZS比起来,速度还是有明显优势的。
自动提示功能的响应速度可以忍受,对中文的支持没有什么大的问题。
自动模版完成,是按ctrl+J,定义模版变量有点郁闷,因为他的编辑PHP4和PHP5分别用了不同的模版,如果你起初没有选定为PHP5,他就会默认调用PHP4的模版

缺点当然也有:
1、自动提示(自动完成)有时候会突然出不来,必须再重新刷新一下workspace就出来了。妖
2、注释代码没有快捷键,当然可以自定义,但ctrl+/却无法定义,很多IDE里都是使用它为注释的快捷键,上手一下子不习惯了。最后我定义成CTRL+M,但,不习惯
3、所有国外IDE的通病,部分快捷键与切换中文输入有冲突
4、对于project的管理不如其他IDE
5、我个人最不舒服的是,对于使用了rewrite功能做dispatch的框架,无法进行调试,例如ZF,或许是我不会调试吧?

其他情况下的应用基本没什么大问题。函数定义的跳转还是比较准确的,选中函数按F1可以跳到函数说明(手册好象有点老)

Tags: php, ide

关于set names

一般我们在设置数据库字符集的时候,都是用mysql_query('set names utf8')这样来处理,但其实这样处理的不全,象discuz等都是采用了全部的操作,它是这样的:mysql_query('character_set_connection=utf8, character_set_results=utf8 character_set_client=binary'),也只有这样,才会比较全面。
仔细看手册 ,手册上也这样写着:
  Note: This is the preferred way to change the charset. Using mysql_query() to execute SET NAMES .. is not reccomended.

那么,我们该怎么处理呢?从PHP5.2.3开始多了一个函数,它就是:mysql_set_charset,你可以:

PHP代码
  1. <?  
  2. $conn = .... //假设这是连接后的 resource ID  
  3. if( mysql_client_encoding ( $conn) != 'utf8' ){  
  4.     mysql_set_charset('utf8');  
  5. }  
这样才是比较推荐的用法。不过,这样的用法也是有要求的,手册告诉我们:

Note: This function requires MySQL 5.0.7 or later.

传说需要采用这样的方法,是因为set names在某些字符集的时候有安全隐患。

Tags: mysql, charset, php

IBM网站上的PHP学习资料

以前也曾经说过,IBM的Developer网站上对于open source之类的介绍比较多,在这些介绍中,也有一部份关于PHP的,这两天在仔细的查找资料时,发现了一个页面,它就是IBM的PHP资源页面,这是对一些PHP资料进行的归档,通过本页,你可以查询一些比较经典的文章。

URL为:http://www.ibm.com/developerworks/cn/opensource/top-projects/php-resources.html

复制一部分如下:

 入门

概述
PHP 简介

部署
安装 XAMPP 进行方便集成开发

源代码控制
利用 PHP 和 Subversion 从零开始创建一个 blog

回页首
 开发

学习 PHP
开始了解 PHP V5 中的对象
用 PHP 走向动态
学习 PHP,第一部分
学习 PHP,第二部分
学习 PHP,第三部分
用 PHP 开发健壮的代码,第 1 部分
用 PHP 开发健壮的代码,第 2 部分:有效地使用变量
用 PHP 开发健壮的代码,第 3 部分:编写可重用函数 -- 充分利用函数
PHP 例解,第 1 部分:轻松的 Webzine 编辑和发送
PHP 例解,第 2 部分:深入研究 Webzine 编辑和发送

高级 PHP
高级 PHP V5 对象
用 PHP 构建 Web 服务
用 PHP 绘制 3-D 图像
使用 PHP 创建图形的巧妙方法
如何在 PHP 中使用正则表达式
结合 PHP 使用 HTML 表单
用 PHP 读取和编写 XML DOM
通过 PHP 脚本访问企业应用

PHP 设计
MVC 模式、类封装还是黑客代码——合理设计 PHP 项目

PHP 应用
使用 PHP 构建搜索优化应用程序,第 1 部分:入门
用 OpenLaszlo 装点 PHP 应用,第 1 部分: 创建交互式界面
用 OpenLaszlo 装点 PHP 应用,第 2 部分: PHP REST 和数据绑定
用 OpenLaszlo 装点 PHP 应用,第 3 部分: 添加数据库
使用 Snort 和 PHP 构建一个小型网络防御系统
用 PHP 使 Web 数据分析进入更高境界 -- 设计您的数据分析,做比简单原始计数更多的事
用 PHP 实现的简单线性回归:第 1 部分 -- 数学库在 PHP 中的重要性
用 PHP 实现的简单线性回归,第 2 部分 -- 解决输出和概率函数缺陷的数据研究工具

调试和监测
PHP 程序员的调试技术


并不全哦,要全的话,还是点最上那个PHP资源的链接,HOHO

 

Tags: ibm, php, 学习资料

通过file_get_contents来Post数据的实例

用file_get_contents来进行POST?很妖吧。
我也没有想到还有这种妖的东西。在向东的博客上看到这个的:http://www.xiangdong.org/blog/post/1623/

回忆未来?别惊讶,用他的话来说是山寨D。

原文:

file_get_contents.php: Post数据

PHP代码
  1. <?php  
  2. function Post($url$post = null)  
  3. {  
  4.     $context = array();  
  5.   
  6.     if (is_array($post))  
  7.     {  
  8.         ksort($post);  
  9.   
  10.         $context['http'] = array  
  11.         (  
  12.             'method' => 'POST',  
  13.             'content' => http_build_query($post'''&'),  
  14.         );  
  15.     }  
  16.   
  17.     return file_get_contents($url, false, stream_context_create($context));  
  18. }  
  19.   
  20. $data = array  
  21. (  
  22.     'name' => 'test',  
  23.     'email' => 'test@gmail.com',  
  24.     'submit' => 'submit',  
  25. );  
  26.   
  27. echo Post('http://localhost/5-5/request_post_result.php'$data);  
  28. ?>  
接收数据:

request_post_result.php  接收经过Post的数据:
PHP代码
  1. <?php  
  2. echo $_POST['name'];  
  3. echo $_POST['email'];  
  4. echo $_POST['submit'];  
  5. echo "fdfd";  
  6. ?>  


看一下,里面有一个特别的函数:stream_context_create,翻开手册看了一下,也没说什么呀,只是说:Creates and returns a stream context with any options supplied in options preset.

而file_get_contents呢?它说:

Note: Context support was added with PHP 5.0.0. For a description of contexts, refer to Reference CLX, Stream Functions.

关于Stream Functions,手册上这么描述的。。。

A wrapper is additional code which tells the stream how to handle specific protocols/encodings. For example, the http wrapper knows how to translate a URL into an HTTP/1.0 request for a file on a remote server. There are many wrappers built into PHP by default (See Appendix O), and additional, custom wrappers may be added either within a PHP script using stream_wrapper_register(), or directly from an extension using the API Reference in Chapter 52. Because any variety of wrapper may be added to PHP, there is no set limit on what can be done with them. To access the list of currently registered wrappers, use stream_get_wrappers().

A stream is referenced as: scheme://target

  • scheme(string) - The name of the wrapper to be used. Examples include: file, http, https, ftp, ftps, compress.zlib, compress.bz2, and php. See Appendix O for a list of PHP built-in wrappers. If no wrapper is specified, the function default is used (typically file://).

  • target - Depends on the wrapper used. For filesystem related streams this is typically a path and filename of the desired file. For network related streams this is typically a hostname, often with a path appended. Again, see Appendix O for a description of targets for built-in streams.

Tags: php, post