如下可以通过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 static静态变量只存在函数里的一个实践情况及应用、实践、总结:



学习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

关于静态全局变量:


所以静态全局变量使用并不多。

AddTime:2017/12/11,标题:【php】php函数中static静态变量的使用
用法:
其实函数中的静态变量和类中的静态变量的用法大同小异

function myFunc(){
    //函数内的静态变量只作用于此函数
    static $myVariable='jianzhong5137';
}

实例测试:funstatic.php


php  funstatic.php
1
2
3
4
5
6
7
8
9
10

1
1
1
1
1
1
1
1
1
1

代码来自:http://blog.csdn.net/yanhui_wei/article/details/8246096



二)附上类里的static及用self读取的一个结论:

结论:
(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";
(2)、静态方法不需要实例化即可调用。同上
(3)、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
(4)、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;
分页: 16/24 第一页 上页 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 下页 最后页 [ 显示模式: 摘要 | 列表 ]