代码如下 | 复制代码 |
//php当前循环为1,循环由里到外依次递增,break默认为1,例如跳出第2层循环 |
setcookie()语法
setcookie (PHP 3, PHP 4, PHP 5)
setcookie -- 发送一个 cookie 信息
说明:bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
例
写cookie
代码如下 | 复制代码 |
<?php setcookie("TestCookie", $value); |
读cookie
代码如下 | 复制代码 |
<?php // Another way to debug/test is to view all cookies |
删除cookie
代码如下 | 复制代码 |
<?php |
由于cookie与HTTP的特定方式,你必须在你输出任何文本前,传送出所有的cookie。否则PHP会给出警告,并且cookie也不会被传送。因此,这样做是正确的:
代码如下 | 复制代码 |
<?php setcookie(’name’, ‘jeff’); echo “Hello Everyone!”; ?> |
以下是错误地:
代码如下 | 复制代码 |
<?php echo “Hello Everyone!”; setcookie(’name’, ‘jeff’); ?> |
代码如下 | 复制代码 |
class Person { private $__data = array(); public function __get($property) { if (isset($this->__data[$property])) { return $this->__data[$property]; } else { return false; } } public function __set($property, $value) { $this->__data[$property] = $value; } } |
__set()和__get()方法是针对protect或private属性的,这样可以做到在外界不能直接访问属性,而通过public定义的__set()和__get()方法却可以轻易访问它,同事这两个方法对属性的操作通用性也比较高,也可以限制对象的属性的合法性,只有属于$__data数组中的属性,才可以进行设置,可以防止外界直接对属性进行设置。但是使用__set()和__get()也有些不足之处。第一,这两个方法只会捕捉私有或受保护的属性,即是外界没有访问权限的属性,这样php会报一个致命错误;第二,这两个方法破坏了属性的继承性。如果父对象中有一个__set()方法,而在子类中又实现了自己的__get()方法,那么对象就不会正常的运行,因为父对象的__get()方法是永远调不到的,而且要想检测重写的属性是否存在也不能得到的,因为它不会调用__get()方法。见到有人通过实现__isset()和__unset()来解决上面的问题。代码如下:
代码如下 | 复制代码 |
public function __isset($property) { if (isset($this->data[$property])) { return true; } else { return false; } } public function __unset($property) { if (isset($this->data[$property])) { return unset($this->data[$property]); } else { return false; } } |
使用__isset()和__unset()则能保证属性是否真正存在,不过这两个方法只有在PHP5.1后才有效。
在php中查找数组中指定值的方法有很多,下面我来介绍php中数组查找函数in_array(),array_key_exists(),array_search()用法查找一个元素是否在数组中,一共有上面三种做法:
in_array '函数在数组中搜索给定的值。in_array(value,array,type)type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
array_key_exists 'array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。array_key_exists(key,array)
Example #1 array_key_exists() 例子
代码如下 | 复制代码 |
<?php |
Example #2 array_key_exists() 与 isset() 的对比
isset() 对于数组中为 NULL 的值不会返回 TRUE,而 array_key_exists() 会。
代码如下 | 复制代码 |
<?php // returns false // returns true |
mixed array_search ( mixed $needle, array $haystack [, bool $strict] )
第一个参数是需要查找的值,第二个参数是数组,最后一个参数是指查找的时候是否检查数据类型是否相同。
代码如下 | 复制代码 |
<?php <?php |
从这里来看,在数据量不大的时候,比如小于1000,查找用哪一种都行,都不会成为瓶颈;
当数据量比较大的时候,用array_key_exists比较合适。
当然这里array_key_exists占用的内存比较大,经测算
数组结构是: array(1, 2, 3, ..)和 array(1 => true, 2 => false, ..)
他们内存使用比值为1:2;
注意:array_key_exist,要比in_array效率高十几甚至几十倍
一个简单的算法
假设数组有1000个元素,键值为小于1000000的无序的正整数,且不连续,如下
$arr = array(1 => 'sadas', 20 => 'aasd', 5002 => 'fghfg', 190023 => 'rty', 248 => 'kj', 76 => 'sddd' ,...);
现在要获取数组$arr中键的值大于500小于600的元素,不用foreach完全循环一遍的话是否有更高效的算法?
解答
代码如下 | 复制代码 |
|
修改三行如下:
1、session.use_cookies
把这个的值设置为1,利用cookie来传递sessionid
2、session.cookie_lifetime
这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以PHP的session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧,999999999怎么样,可以的!就这样。
3、session.gc_maxlifetime
这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除! 那么我们也把它设置为99999999
如果你不能修改php.ini文件
代码如下 | 复制代码 |
<?php |