背景:zend studio 12.0.2 修复了一个12.0.1的:  Fixed problem with referenced variables marked as undefined,我都说好像有问题,刚开始还以为是破解得有问题呢。 AddTime:2015-4-5
zend studio 12.0.2 破解&keygen:
http://download.csdn.net/detail/wfstock/8418635


破解ZendStudio 10.1:
刚才装了个ZendStudio 10.1, 发现中文网络上没有可用的破解文件, 就来分享个



直接升级后,因为之前目录是12.0.1现在想修改一下发现报错:
提示:The Zend Studio executable launcher was unable to locate its companion shared library.
打开:ZendStudio.ini 修改下12.0.1指向:12.0.2

D:\Program Files\Zend\Zend Studio 12.0.2\plugins\org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
D:\Program Files\Zend\Zend Studio 12.0.2\plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20140603-1326

修改后就打开了,再就是打开后把工作空间切换一下即可:
D:\Program Files\Zend\Zend Studio 12.0.1\workspaces\DefaultWorkspace
D:\Program Files\Zend\Zend Studio 12.0.2\workspaces\DefaultWorkspace

破解文件的网盘地址:
http://pan.baidu.com/share/link?shareid=3381476648&uk=1342500274

解压缩后有俩jar文件, 一个是放在/zendstudio_install_path/plugins目录下用于覆盖同名文件的jar,
一个是用来运行的keygen.jar,  java -jar keygen.jar即可执行

来自:http://blog.suchasplus.com/mt/mt-search.cgi?blog_id=3&tag=zendstudio&limit=20

!!!特别注意:
上述实践都还Ok,特别注意的是,前晚别汉化,汉化后就玩完了,要输入注册码,还好我已经习惯了。
---------------------------------------------------------------------------------------------------------------------------------------
Last update:
http://www.geekso.com/component/zendstudio-downloads/
这儿提供的那个jar包好实践是可以安装那个jquery插件的,汉化也是没有问题的,所以,还是用它吧。:-)

Zend Studio 12.0.1 汉化
1.Help->Install New Software
2.在Work with框中复制此地址:http://download.eclipse.org/technology/babel/update-site/R0.12.1/juno/
3.复制完地址后按回车键确认,这时会提示pending...(等待...),等侍完成后会出来很多语言列表让你选择,
4.请选择“Babel Language Packs in Chinese(Simplified)”简体中文包选择项,下一步,再同意,就自动安装了,安装完以后会重启

上面划R0.12.1的版本后有变,获取方式:
进入http://www.eclipse.org/babel/downloads.php,看看语言包更新到哪个版本了,把删除线部分的版本号改成当前版本号就OK了
---------------------------------------------------------------------------------------------------------------------------------------

zend studio 9.0.1换行格式由windows的换行符设置为UNIX下的换行符,zend studio 9.0.1 如何取消显示换行符和空格符,:
http://www.jackxiang.com/post/4897/
此次补充如下:
Zend studio 10.0果然好了不少,主要是快了,尽管用了教旧的Eclipse:
此次正式版比上一版的测试版的性能要好很多,主要是因为测试版用的是最新的Eclipse 4.2.1(新版本Eclipse性能确实不怎么样),而正式版放弃了最新的Eclipse,而使用了Eclipse 3.8.1 juno版,性能大大提升,推荐升级此版本。
0.代码颜色之eot设置:
Window->Preferences->PHP->Editor->Syntax Coloring
注释  HereDoc  #FF4400  255,68,0  这个就是eot的颜色,如:
$elements['mainpage']=<<<eot

eot;

1.汉化:
zend studio 10汉化Url:(刚出来的最新版)
http://archive.eclipse.org/technology/babel/update-site/R0.10.0/helios/
zend studio 12.5.1 汉化 -
http://download.eclipse.org/technology/babel/update-site/R0.12.1/juno/
------------------------------------------------------------------------------------------------------------------------------
Zend Studio10.1出现Call to undefined function
如果你在用 Zend Studio 编写 PHP 项目时发现调用系统函数时调试正常, 但是在编写代码时却提示函数未定义”Call to undefined function ‘xxx’”, 在左侧语法检测状态区域栏总是显示个小黄色的三角形的感叹号, 实在是看着扎眼.

解决办法:
1, 修改项目 .buildpath 文件(不用)
2, 重置项目编译状态
Project -> Clean -> Clean all projects
3, 重新编译项目
Project -> Build All
4, 完成! 再看看是不是小黄色的感冒号图标消失啦~
------------------------------------------------------------------------------------------------------------------------------

2.字体及样式:
    1)字体:
 没想到zend studio 9中对中文显示不太好看,似乎有点小了。修改如下:打开Window->Preferences->General->Appearance->Colors and Fonts,找到Basic->Text Font,如果想用系统默认字体,就点Use System Font,我知道你似乎也不太愿意用系统默认字体,那就点Edit选择你想要的字体吧。

  这时win7用户可能会出现一种情况(XP不知道,其他系统也不清楚),发现字体列表里,没自己想要的字体,明明系统中有N多字体,这里才显示了一小部分。遇到这种情况可以点“显示更多字体”,会打开系统字体文件夹,找到你想要的字体,应该是隐藏属性,然后就 右键->显示,就OK了。选择后点 确定->apply->OK就可以了。

  本人比较喜欢Courier New字体作为代码编辑字体:
      Eclipse设置Courier New字体,这种情况基本上都发生在win7下面,解决的办法很简单:
Preferences-〉general-〉Appearance->Colors and Fonts
改成 Courier New 10号就行了
过去我还用过Courier / Courier New ,也挺不错。但是不知道为什么,现在在win7上的SecureCRT中找不到这两种字体了:
如果你在列表里看不到 Courier New ,就到控制面板->字体,找到Courier New,右键,显示。
然后回到eclipse关掉字体列表重新打开。就能在列表里看到 Courier New 了。
    2)样式:
  目前感觉zend studio自带的PHP代码着色方案不是很好,特别是关键字没有高亮,修改方法也很简单。Window->Preferences->PHP->Editor->Syntax Coloring。修改对应的颜色就可以了。下面提供一套仿dreamweaver的着色方案,仅供参考。

中文  英文  HEX  RGB
变量            Variable  #0066FF  0,102,255
字符串  String  #CC0000  0,12,0
常数/内部常数  constants/internal constants  #552200  85,34,0
数字  Number  #FF0000  255,0,0
保留关键字  Keyword  #006600  0,102,0
块分隔符  PHP tags  #FF0000  255,0,0
注释  PHPDoc comment  #FF9900  255,135,0
注释  PHPDoc  #FF4400  255,68,0
单/多行注释  Single/Multi-line comment  #FF9900  255,135,0

3.PHP里的tab转为4空格设定,修改Zend Studio的tab键为4个space:
然后依次找到PHP – Code Style – Formatter,Edit里有一个Indentation Tab Policy:Space ,Indentation Size:4.
PHP Conventions Jack[built-in]
修改Zend Studio的tab键为4个space
Window->preferences->PHP->Code Style->Formatter->右边show按钮->spaces->4,改好好随便起一个名字就可以了。
JS的也可以一样修改,位置:
Window->preferences->JavaScript->Code Style->Formatter->右边show按钮->spaces->4,改好好随便起一个名字就可以了。
后记,PHP和JavaScript的tab转code最快找到方法是搜索:Window->preferences里输入tab,这样容易找到各种tab相关设置。
4.高亮:
窗口(windows) -> 首选项(preferences) -> 常规(general) -> 外观(apprearcn) -> 颜色和字体(color and font) -> 基本 -> 文本字体(text font)

5.折叠:
   ctrl + / [小键盘的斜杠,如是笔记本就不行了,那个斜杠是用来做注释的]。
解决办法:
Window -> Preferences -> General -> Appearance -> Colors and Fonts -> Basic -> Text Font -> Change
选择 BitStream Vera Sans Mono (其他几个BitStream的字体应该也可以)
代码默认不折叠的设置:
进入window菜单->preferences,在左边找到PHP项,然后找到Editor->Code Folding,里面有Enable folding的选项,去掉就可以了。
注意:如果左边选的是General,则在Editor的Stuctured Text Editors中也有Enable folding的选项。不过实验证明这个选项不能控制打开时代码的折叠,只对当前编辑的有效。

杂七杂八:
1)高亮:
  安装Aptana3中高亮显示相同变量(实践OK),这个经过上面的模拟Dreamweaver样式修改后不用了。
Window -> preferences -> Aptana Studio -> Editors -> PHP
选中 Mark occurrences with background color 其中选项 Global variables 就是高亮显示相同变量
==================================================================
我的实践: PHP->editor-> Mark occurrences with
==================================================================

2)背景颜色修改:
   在编辑框上右击——preferences(首选项)—— General(普通)——Editors(编辑器)——Text Editors(文本编辑器);在Appearance color options (颜色选项)中选择Background color(背景颜色),再点击右侧的color选取颜色即可。——apply(提交)——OK(好)。
注: 中文可能翻译部太正确,自己琢磨下!
==================================================================
我的实践:preferences(首选项)—— General(普通)——Editors(编辑器)——Text Editors(文本编辑器);在Appearance color options (颜色选项)中选择Background color(背景颜色),再点击右侧的color选取颜色即可。
==================================================================

3)折叠功能:
Zend Studio中的代码折叠设置
    用Zend Studio打开PHP代码,默认是代码折叠的,如果需要展开,可以按ctrl+/来打开,注意,这个/是数字小键盘左上角的/。不过,我用的是笔记本电脑,如果要切换到小键盘就比较麻烦。所以如果能在打开文件的时候就自动展开,不自动折叠代码,就好了,具体的方法如下:
    进入window菜单->preferences,在左边找到PHP项,然后找到Editor->Code Folding,里面有Enable folding的选项,去掉就可以了。
    注意,如果左边选的是General,则在Editor的Stuctured Text Editors中也有Enable folding的选项。不过实验证明这个选项不能控制打开时代码的折叠,只对当前编辑的有效。
我的实践: PHP->editor-> code folding 勾选下面的:initially fold these elements:Phpfunction

4)显示空格和换行符号,显示打印页边距,及换行空格符号可见,显示代码的最大字数,查找作用域的颜色等设置,打印长度竖线宽度设定,及换行等:
首先,在Zend Studio中,Windows ->preferences->General->Editors->Text Editors的show print margin中,可以设置在多个个字符处显示一根绿色的竖线,提醒你此处就是你所设置的最大字数.
接着,在Windows ->preferences->PHP->Code Style->Formatter->Edit->Line Wrapping中,可以设置在编写类的定义,方法的定义,调用方法,表达式时自动进行换行.记得勾选上"Force split".
需要注意的是, 在定义字符串的时候,在一行达到最大字数时不会自动分行,需要自己手动分行,这就是第一步设置显示绿线的用处.



在Zend Studio 10的Outline中使用的图形标志:http://old.uplook.cn/index.php?a=index&m=Index&c=show&id=228514&
在Zend Studio 9中,如果打开Outline View,可以看到当前浏览的文件中对各种元素的图形标志.这些标志方式在其它一些View中当然也是可以看到的.这里记录下,主要是PHP源码文件.
1.图形主体
绿色空心圆: public field
黄色空心菱形: protected field
红色空心方块: private field
绿色实心圆: public method
黄色实心菱形: protected method
红色实心方块: private method
2.图形附加符号
右上角:
'S': 具有static修饰符
'C': 这是一个构造方法
'F': 这是一个常量
'A': 具有abstract修改符
右下角:
绿色实心三角形: 此方法对父类方法进行了overriding
PHP版本:
PHP 5.4.4-12 (cli) (built: Feb  1 2013 08:58:27)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans
在多串口用Select读取时,PHP出现:
PHP Strict standards:  Only variables should be passed by reference in /root/dev_Codes_All/phpComSelect/fopenSelectWithRaspberry.php on line 49
PHP Stack trace:
PHP   1. {main}() /root/dev_Codes_All/phpComSelect/fopenSelectWithRaspberry.php:0

实践下面Ok,能去掉提示:
PHP Strict Standards: Non-static method错误的解决方法
在程序添加了error_reporting(E_ERROR | E_WARNING | E_PARSE)后解决问题!

来源:http://www.glblog.net/?post=178
树莓派在运行命令行出出现如下错误:


可以通过以下命令解决,关闭方法:

其实前面在windows7下安Lamp也出现过,当时的记录:http://jackxiang.com/post/5919/
阅读全文
如下可以通过smarty获取支Url地址:

m.xiyou.cntv.cn/contentmanage/videoall?a=b
分别是:
m.xiyou.cntv.cn
/contentmanage/videoall?a=b
对比PHP的:
$_SERVER["REQUEST_URI"]=例子:/lianxi/servervalues.php?a=1&b=2
$_SERVER["HTTP_HOST"]=localhost

来源:http://www.itlearner.com/code/smarty_cn/language.variables.smarty.html
阅读全文
php5.3.13向PHP 5.4.4-12迁移时出现Non-static method should not be called statically的问题,在网上搜索了一下解决方法:
Strict Standards: Non-static method should not be called statically
严格的标准:非静态方法不应该被静态调用
我的解决办法:
1)修改PHP.ini文件里的配置,发现问题依旧。
error_reporting = E_ALL | E_STRICT
修改为
error_reporting = E_ALL & ~E_NOTICE
2)打开Urlrewrite重写的index.php发现这儿:

于是修改为:

于是就不报错了,这只是一个临时解决办法,最好是按PHP5.4的严格编码来写。

以下来自网络:
原因是 程序编码 不符合运行环境
临时解决办法是:

如果有权限修改 PHP.INI
修改文件 php.ini中设置:
error_reporting = E_ALL | E_STRICT
显示那些不符合编码规范的警告(coding standards warnings)。
如果出于调试需要,应改为 error_reporting = E_ALL & ~E_NOTICE

如果你没有修改PHP.INI文件的权限
也可以修改程序代码
在程序最前 加上
error_reporting(E_ERROR | E_WARNING | E_PARSE);



解决方法如下:

1, 打开 xampp/php/php.ini 配置文件, 把 error_reporting = E_ALL | E_STRICT 替换成 error_reporting = E_ALL & ~E_STRICT  ,把 display_errors = On 替换成 display_errors = Off ,然后保存,重启服务器,刷新页面。

2,也可打开joomla 文件夹下的 configuration.php, 把error_reporting = "-1" 替换成 error_reporting = "-6138", 然后保存,这种方法治标不治本。

3,修改joomla文件夹下的 htaccess.txt 文件, 打开文件,找个合适的位置,如最后面,添加如下代码:
# supress php errors
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

然后 文件-另存为 ,选好保存路径, 文件名为:.htaccess , 文件类型变为:所有文件  d,保存。

来源:http://wordpress.facesoho.com/program/non-static-method-should-not-be-called-statically.html
          http://wuxiong8665.blog.163.com/blog/static/93512201152210481436/
          http://www.laruence.com/2012/06/14/2628.html
单例模式,也叫单态模式
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。

还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况
下方便的做到。

另外方面,Singleton也能够被无状态化。提供工具性质的功能,

Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。

我们常常看到工厂模式中类装入器(class loader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。

一般Singleton模式通常有几种形式:

public class Singleton {

  private Singleton(){}

  //在自己内部定义自己一个实例,是不是很奇怪?
  //注意这是private 只供内部调用

  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
    return instance;   
   }
}




第二种形式:

public class Singleton {
  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  if (instance==null)
    instance=new Singleton();
  return instance;   }

}




使用Singleton.getInstance()可以访问单态类。

上面第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。

注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴趣者进一步研究。

一般认为第一种形式要更加安全些。


使用Singleton注意事项:
有时在某些情况下,使用Singleton并不能达到Singleton的目的,如有多个Singleton对象同时被不同的类装入器装载;在EJB这样的分布式系统中使用也要注意这种情况,因为EJB是跨服务器,跨JVM的。

我们以SUN公司的宠物店源码(Pet Store 1.3.1)的ServiceLocator为例稍微分析一下:

在Pet Store中ServiceLocator有两种,一个是EJB目录下;一个是WEB目录下,我们检查这两个ServiceLocator会发现内容差不多,都是提供EJB的查询定位服务,可是为什么要分开呢?仔细研究对这两种ServiceLocator才发现区别:在WEB中的ServiceLocator的采取Singleton模式,ServiceLocator属于资源定位,理所当然应该使用Singleton模式。但是在EJB中,Singleton模式已经失去作用,所以ServiceLocator才分成两种,一种面向WEB服务的,一种是面向EJB服务的。

Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对Java的类 线程 内存等概念有相当的了解。

总之:如果你的应用基于容器,那么Singleton模式少用或者不用,可以使用相关替代技术。



来自:http://www.dowhile.net/forum.php?mod=viewthread&tid=497
百度有一篇文章,使用单例模式内存中保存数据可提高数据处理速度,Url:http://wenku.baidu.com/view/c0d6f78cb9d528ea81c779a0.html

PHP的单例模式:
http://blog.sina.com.cn/s/blog_6dbbafe001018w7r.html
http://blog.csdn.net/jungsagacity/article/details/7618587
http://www.cnblogs.com/mo-beifeng/archive/2012/02/21/2362332.html
PHP的单例实现如下:

Run Result:
This is a Constructed method;调用方法成功
( ! ) Fatal error: Clone is not allow! in D:\wamp\www\aaa\danli.php on line 27
问题:
问题讨论:
一:[北京]PHPMAN  14:52:14
有没有一个比sprintf稍微强大点的替换函数?
sprintf('select * from %s where %s=%s',这里是数组);
----------------------------------------------------------------------------------------
1)实现这个功能用到正则,这个函数可能是这样,数组长度不定怎么办?:
学习正则并可以回调的函数preg_replace_callback:



PHP的多个参数args,结合create_function生成一个函数来实现,
再学习这个create_function:


最后,结合上面两个函数成型如下新的函数,该问题得到解决:




中庸就是春江  16:33:04
在preg_replace_callback 中使用匿名函数,不知道怎么把变量$arr带过去,无奈使用$GLOBALS
尽管可以有多方法,但这样写也是对新函数的了解,有说用数组函数,不用正则的:
莫莫<happy.yin@qq.com>  16:34:34
用正则 还不如  implode  array_keys array_value  组合 划算呢
竖琴螺  16:28:08
{math equation=rand(1,100) assign="m"}
阅读全文
1)纯Js实现来自PHP高级群中庸就是春江:


2)用Jquery实现,PHP高级群单曲实现:
先说前端使用 jQuery 时怎么区分:

  jQuery 发出 ajax 请求时,会在请求头部添加一个名为 X-Requested-With 的信息,信息内容为:XMLHttpRequest

  在后端可以使用 $_SERVER["HTTP_X_REQUESTED_WITH"] 来获取。(注意:中划线换成了下划线,不区分大小写)

  由此,我们可以这样来判断是否为 ajax 请求:


写成函数:


在使用原生 JavaScript 发出 ajax 请求时,我们也可以给头部添加信息,以方便后端同学进行区分,方法如下:



这里我们也一样是给头部添加 X_REQUESTED_WITH 信息,与 jQuery 的一致。当然你也可以更改为别的信息来进行区分。



  OK,进行区分之后有什么好处呢?说两个例子:

  1.当 js 文件未加载完时,用户点击了某个按钮或链接,本应是 ajax 请求的成了 正常请求,后端根据判断,不输出 ajax 时的 json 数据,而是跳转,这也是优雅降级的形式。

  2. [A 页面]使用 ajax 方式进行登录,[B 页面]使用正常方式登录,如果不区分,后端需要写两次几乎完全相同的代码,而有了区分,可以把重复的代码消掉。

来源:http://copier.blog.163.com/blog/static/220101002012111241827156/
如何防止一个函数执行时间过长呢?在PHP里可以用pcntl时钟信号+异常来实现。
代码如下:

root@192.168.137.158:~/php/swoole_study_codes# php timeout.php
PHP Exception:   in /root/php/swoole_study_codes/timeout.php on line 19
PHP Stack trace:
PHP   1. {main}() /root/php/swoole_study_codes/timeout.php:0
PHP   2. a() /root/php/swoole_study_codes/timeout.php:26
PHP   3. sig() /root/php/swoole_study_codes/timeout.php:5
timeout
Stop
a finishi
Stop

     原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数会抛出一个异常,被外层代码捕获。这样就跳出了原来函数的执行,接着执行下面的代码。如果函数在规定的时间内,时钟信号不会触发,在函数结束后清除时钟信号,不会有异常抛出。
来源自rango兄弟的博客:http://swoole.sinaapp.com/archives/64
Session其实是和cookie有联系的,通过session_id()作为浏览器里的cookie发送给浏览器,下次浏览器就像PHP客户端发送这个session_id(Cookie)后,服务器于是就知道这个用户是谁,通过session_id获取到所有的当前用户设置的session数组,因session是隐私,所以,在一个PHP里是没法获取到所有用户的session的,只能获取到当前,要想获取所有的,得记录到文件中(有session的用户访问)才行获取到程序设置的session值,否则,只能从服务器里的session文件中去提取(可能要对文件进行破解)。


阅读全文
在XML文档中使用类似"<" 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始,组合XML字符串时遇到了< 。需要转义。
PHP5自带的simplexml_load_file对这个xml解析内容为空是因内容里包含:
<![CDATA[标题3]]>  内容里有 <> 特殊字符,所以,解析不到值。

又是一个鸡肋,为什么要说又呢?呵呵。

XML 的 CDATA,即 <![CDATA[ 与 ]]> 之间可以放 <、>、&、'、" 字符,由于 CDATA 中的内容不会被解析,所以上述字符在 CDATA 中不会造成 XML 的错误,否则“<”会被当作一个标签的开始。

但是,重要了。CDATA 中仍然不能放一些东西:

一是放特殊符号危险,比如“”,可能某些解析器认识,某些解析器不认识,解决办法:XmlTextReader 解析 XML 时遇到特殊字符出错。
二是不能放 <![CDATA[ 和 ]]>。像我们的 IT 类文章中可能经常出现这些字符,出现了,若写在 XML 势必出错,解决办法是用 System.Web.HttpUtility.HtmlEncode 将 <、>、&、'、" 进行编码,取值时再解码。那问题来了,既然已经编码了,还要 CDATA 做什么?


最后,在一个兄弟那儿看到是支持CDATA的PHP也可以解析,如下:
http://hi.baidu.com/yinqinlong502/item/e4dfc900a977ed1acc34eae9
php 解析xml遇到cdata怎么办
用$rss = simplexml_load_file ( '11111.xml', 'SimpleXMLElement', LIBXML_NOCDATA );哎就为了这么个函数我还去写正则准备替换了,白白废了我两小时,shit!!!以后多注意下那些函数的可选参数吧。长点教训.
直接输入xml内容为参数的也支持CDATA的解析,如下:


阅读全文
[属性名称] 匹配包含给定属性的元素
[att=value] 匹配包含给定属性的元素 (大小写区分)
[att*=value] 模糊匹配
[att!=value] 不能是这个值
[att$=value] 结尾是这个值
[att^=value] 开头是这个值
[att1][att2][att3]... 匹配多个属性条件中的一个

===========================================下面举例================================

                   <UL id=comparePro>
                        <li id=compare_prod_list_001>信用卡贷款活动产品1-中国建设银行</li>
                        <li id=compare_prod_list_002>信用卡贷款活动产品2-中国建设银行</li>
                        <li id=compare_prod_list_003>信用卡贷款活动产品3-中国建设银行</li>

                        <li id=other>其他</li>
                    </UL>

要取到所有 id以compare_prod_list_开头的<li>   :  var list=$('li[id^=compare_prod_list_]');

来自:http://cyxu2004.blog.163.com/blog/static/457687182011112851043/

<tr align="center" id="_tr_809401de-0f4b-11e1-b237-001e0bdc11a2" class="odd">
这样的没有时刷新页面的判断(后面的Id值是每一个不一样的):
IE6,IE7下按钮(BUTTON)变宽的解决方法:


来自:http://niutuku.com/tech/css/250633.shtml

或则单独写死在style里:

写在Html页面里宽和高:

测试一下:

如果用双引号引起来:
string(18) "450311199001010516"
string(18) "450311199001010517"
显然是不相等的!

但如果用get方式传入呢?经测试get是相等的:
我很想知道你的get为什么是等的。。。
哎。
有人认为:
最初用户输入时候,进行处理,也就是当字符串了。
这有啥结论的?
就两个知识点:

1、POST GET的,PHP默认都转为字符串处理
2、PHP脚本中,定义的int型,如果超出范围,会被转为float型而失去精度
在很多框架里有这样的情况,一个config文件里直接就return了(return array("name"=>"jack","info"=$infoArr)),但是没有一个函数,于是觉得纳闷了,怎么能这样呢,其实往往这个文件可能是一个共公的return文件,于是就写成这样了,再由其它文件包含进来,如:


自己实践Ok版本:

因为包含的内容里有:
<?php defined('SYS_PATH') or die('No direct script access.');
所以加了一行:
                   define('SYS_PATH', $this->_domain_path . 'libraries' . DIRECTORY_SEPARATOR);
才能读出来。

return 一定要在函数里面吗
没有这么规定吧
中庸就是春江  10:00:27
确实没有这么规定,但你在函数之外使用return就会报错
单曲  10:03:55
php在哪里都可以return的~~
天枫  10:05:27
没有吧
现在一般config文件一般都直接return array
单曲  10:05:46
e你。
嗯。
天枫  10:06:13

反正我这么写
不会报错啊
前程似锦  10:06:23
因为现在的config 都是inc进来的
单曲  10:06:35
inc?
前程似锦  10:06:37
老子的框架也这么搞的
中庸就是春江  10:06:38
js里面是这样的,php不报错?
天枫  10::
include
单曲()  :06:47
$config = 'config.php';
这个config.php  return一个数组
天枫  10:06:56
意思是直接运行这个config文件会报错?
单曲  10:06:59
$config 就能得到这个数组了。
前程似锦  10:07:04
$config = include 'config.php';
中庸就是春江  10:07:04
还能这样?
这个还差不多


     写在最后,在新的版本里是不会报错的,确实这样搞有点违反规则,直接就return,想到main里去么?但框架里往往有这么玩的客观存在。
今天调试遇到一个错误::Call-time pass-by-reference has been deprecated...
查了老一会儿,在网上找了下答案,于是找到了并修改了一下php.ini就好了,如下:
Warning: Call-time pass-by-reference has been deprecated解决方法
修改php.ini就可以了。
1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On

从php手册中可以找到:
allow_call_time_pass_reference boolean
是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。
在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。
当allow_call_time_pass_reference=Off时

要想通过引用来传递参数$b,程序可改为


若是在PHP,用户自定义函数中传入引用参数,例如:

你可能须要开端该设置。

Linux下是这样的报错:Call-time pass-by-reference has been removed
解决 PHP Fatal error: Call-time pass-by-reference has been removed
如果这样使用函数(或者类)的话,会产生一个 PHP Fatal error:
foo(&$var);
实际上,这样用法在php5.3中就会有提示,只是之前的仅仅会提示Deprecated而已。


php.ini中allow_call_time_pass_reference参数的意思

从php手册中可以找到:allow_call_time_pass_reference boolean,在PHP5.3里是一个警告可以用:

来去掉,但是在PHP5.4里就成了一个错误,得修改,如下:

参考:http://www.azuis.me/blog/archives/175
背景:看到一个redis的代码用php写的,用到master和slave结构,用到类的函数里的静态变量,一个master里和slave里都用同一个static $_cache;觉得奇怪了,于是查一下这样用它们之间有关联么?一查没有关联(两个变量一样感觉有关联),这就是静态变量的用法,有点意思。
静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。
参考:http://www.nowamagic.net/php/php_StaticVariable.php




学习PHP静态变量的基础:




输出:01234
也就是每次用:static $a = 0;时,在第二次无效了。
调用的时候 static $count = 0; 语句会重复执行,这为什么不会导致count变量被重复赋值呢?做如下测试:


结果:


代码第5行第一次输出$a的值为4,由此推测PHP在页面初始化的时候分配静态变量的内存,此时使用了同一个变量的最后一次声明的值(这个可以把4改为其他数测试)。代码第7行调用unset函数销毁变量$a,再次输出$a的值时看到未定义变量的提示,说明变量已经被销毁。

第10行再次输出时,输出结果仍是4而不是20,有两种可能,一个是php再次初始化了$a的值,另一种是php使用了$a被销毁前的值,这个问题在第20行输出的时候解决。第16行$a销毁的时候值为10,第19行声明后输出仍为10。

第11行将$a的值修改为10,在14行再次声明$a,17行输出认为10。推测为重复声明时php还是使用静态变量内存中的值,而不再次赋值。

至此,手册中发现的问题,大致上已经解决了,即递归调用中的声明没有改变$count的值,所以递归在$count=10时成功停止。

原文来源:
http://www.cnblogs.com/darkbluever/archive/2011/07/18/2109533.html



PHP static局部静态变量和全局静态变量总结:
静态局部变量的特点:
1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值
2.静态局部变量只会初始化一次
3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。
4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

---------- 调试PHP ----------
6
7
8

Output completed (0 sec consumed) - Normal Termination

关于静态全局变量:


所以静态全局变量使用并不多。
背景:关于自动加载类文件是PHP这种脚本在程序大后为了按需要加载时所需要的一种机制,很有必要。
将__autoload换成loadprint函数。但是loadprint不会像__autoload自动触发,这时spl_autoload_register()就起作用了,它告诉PHP碰到没有定义的类就执行loadprint()。
以上一行摘自:http://blog.csdn.net/panpan639944806/article/details/23192267

/tmp/autoload/autoload.php


/tmp/autoload/aClass.php


/tmp/autoload/bClass.php


运行一下,看一下在加载前和后引入的文件是否一样?不一样有新文件:
[root@test autoload]# php autoload.php  
Array
(
    [0] => /tmp/autoload/autoload.php
)

.:/opt/2012-01-30/php-5.3.10
aClass loaded...bClass loaded...Array
(
    [0] => /tmp/autoload/autoload.php
    [1] => /tmp/autoload/aClass.php
    [2] => /tmp/autoload/bClass.php
)

上面是一个用法,第二个是把__autoload 这个函数都给重定义了:
spl_autoload_register(array('Ko', 'autoload'));//这要就由function __autoload($className)变成了:function autoload($className)
————————————————————结合框架来说这个autoload的事情—————————————————————

/**
* Enable the Ko auto-loader.
*
* @see  http://php.net/spl_autoload_register
*/
spl_autoload_register(array('Ko', 'autoload'));
----于是了解到如下自动加载机制:
英文原文:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

以下内容描述了符合自动载入程序互操作性所必须遵守的强制性规范。

强制要求

一个完整的命名空间 (namespace) 和类 (class) 必须使用以下结构: \<Vendor Name>\(<Namespace>\)*<Class Name>
每个命名空间 (namespace) 必须使用供应商名称 (“Vendor Name”)  做为顶层命名空间(top-level namespace).
每个命名空间 (namespace) 的子命名空间 (sub-namespace) 数量不限.
程序从文件系统载入的时候,每个命名空间 (namespace) 的分隔符 (separator) 将被替换为操作系统的目录分隔符 (DIRECTORY_SEPARATOR).
在类名 (CLASS NAME) 中的下划线 ( _) 也将被替换为操作系统的目录分隔符 (DIRECTORY_SEPARATOR) , 在命名空间 (namespace) 中的下划线 (_)不做替换.
从文件系统载入的合格的命名空间 (namespace) 和 类 (class) 必须以 .php 结尾.
供应商名称 (vendor names), 命名空间 (namespaces)  及类名 (class names) 可以使用任意大小写字母的组合.
示例

\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php
在命名空间(Namespaces)和类名(Class Names)中的下划线

\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
The standards we set here should be the lowest common denominator for painless autoloader interoperability. You can test that you are following these standards by utilizing this sample SplClassLoader implementation which is able to load PHP 5.3 classes.

实现示例

下面的示例函数演示了遵循上述规范的自动加载过程.

SplClassLoader 实现

如果你的程序遵守上面的自动载入程序互操作性规范,可以使用下面的SplClassLoader实现来加载你的类 (classes) . 这也是 PHP 5.3 推荐的遵循本规范的类 (class) 加载方式.
来自:http://www.dunban.com/?p=30

http://gist.github.com/221634


最后参考:
http://www.jb51.net/article/23956.htm
http://blog.csdn.net/hguisu/article/details/7463333
http://www.php.net/manual/zh/function.autoload.php
http://blog.sina.com.cn/s/blog_6915bcb101017p2x.html
http://www.php100.com/html/php/lei/2013/0905/5267.html


YII框架里,一般各种框架都有这样的用法,特别是PHP5的框架:
spl_autoload_register(array('Ko', 'autoload'));
bool spl_autoload_register(array(‘class’,'static_function’))
参数为数组,数组中第一个值为类名,第二个值为方法名,且必须为静态方法。
例:

输出:
---------- 调试PHP ----------
open\OpenAPIModel.php
models\open\OpenAPIModel.php
输出完成 (耗时 0 秒) - 正常终止
在实际运用中文件名里是不能有Model的字符的,通过对findFile的Debug一下得到:
D:\www\iseeyoo\trunk\codes\application\models\open\adminchannellink.php
class open_AdminChannelLinkModel extends Model  //类名包含下划线和Model(如果是Service也一样:class OpenChannelService extends baseService,文件名:\application\services\openchannel.php也不能包含Service字符。),这个规则是:文件命名里不能有Model。(这个得注意下)
{

}
//直接在Core里Debug下,得出上面的规律。
public static function findFile ($dir, $file, $ext = 'php')
{
  if($file == "open_adminchannellink"){
      file_put_contents("d:/wamp/www/aaa.txt","ModelfileDiR=".$dir."\n",FILE_APPEND);
      file_put_contents("d:/wamp/www/aaa.txt","Modelfilepath=".$path."\n",FILE_APPEND);
  }
  打印出:
  ModelfilePosition=open_adminchannellink
  ModelfileDiR=models
  Modelfilepath=models\open\adminchannellink.php


kohana 这个也是支持contrller直接接调用Module层的,实践OK的,理论上就是通过Autoload调用module,Service(文件类名有不同的标记)的类名(这个是有规范的上面有描述),进而拼接出大体位置,让findfile去找到这个文件:
application\controllers\open\index.php

http://domain.com/open/index/index
这一看是contrller下面有一个open(经过路由配置到了open目录的),后有一个index.php的文件里有一个index函数,如果想直接获取这个uri的内容,可以通过这个函数实现,如下:


这个forward吧,其实就相当于YII里的路由控制器访问index目录下的index控制器下面的index的action方法,路由相关知识:
什么是路由:
在框架里边我们通过路由获得控制器和方法,
我们有了控制器的方法,就可以进一步与视图或模型进行交互,
http://网址/index.php?r=控制器/方法
http://网址/index.php?r=user/cc

===============================================================


一般还是有一个autoload函数来做加载的:



自动auto加载代码:

自订义自动加载函数用SPL:
VPS上很多应用,是需要zip扩展的。而我帮朋友配置的一台VPS,是Redhat的系统,并且是64bit的,但是貌似网上的LNAMP一键安装包恰好还不支持64位,所以我的LNAMP环境是全手动搭建的。由于手动搭建,为了简单,一些扩展默认我就没编译到php里面去,因此这次的这个zip扩展,需要手动配置进去。其实PHP的很多扩展,能在编译的时候,通过开关开启。如果编译的时候,没有开启,也没关系,可以通过php.ini中加入extension的方式开启。比如这次的zip扩展,就可以用此方法实现。此文为记录一下zip扩展手动安装的过程,备忘。
第一步,下载源代码并解压缩
http://pecl.php.net/package/zip
wget http://pecl.php.net/get/zip-1.10.2.tgz
tar zxvf zip-1.10.2.tgz
cd zip-1.10.2
第二步,编译并安装
/usr/local/php/bin/phpize
#运行此命令后,会自动生成几个文件,包括configure文件
./configure --with-php-config=/usr/local/php/bin/php-config
make & make install
第三步,配置php.ini,并开启zip扩展
zip安装后,会显示安装的路径,比如:/usr/local/php/lib/php/extensions/zip.so
在php.ini中加入: extension=/usr/local/php5/lib/php/extensions/zip.so
如果是LNMP安装包,需要重新启动php-fpm,如果是LNAMP结构,需要重启apache即可。
至此,安装zip扩展完毕,可以在phpinfo()中检查zip扩展是否已经正确启用。
分页: 12/18 第一页 上页 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]