当前位置:  编程技术>php
本页文章导读:
    ▪foreach使用 - 张扬个性,敢为天下先      1. 读取记录while($row=mysql_fetch_array($result)){$record[]=array(    'title'=>$row['title'], 'body'=>$row['body'],);}$smarty->assign('yes', $record);//传说中的替换变量,即将$record赋给yes 2.在前台展.........
    ▪php获取 本月 本周 或者 下月 下周的 开始时间 结束时间 - Sudo高      <?php$now_time = time();$date=date("Y-m-d",$now_time);function get_date($date,$t='d',$n=0){ if($t=='d'){ $firstday = date('Y-m-d 00:00:00',strtotime("$n day")); $lastday = date("Y-m-d 23:59:59",strtotime("$n day")); }elseif($t=='w'.........
    ▪深入理解PHP传参原理 - driftcloudy      首先说下今天想到的一个问题。在编写php扩展的时候,似乎参数(即传给zend_parse_parameters的变量)是不需要free的。举例:PHP_FUNCTION(test){ char* str; int str_len; if (zend_parse_parameters(ZEND_NUM_.........

[1]foreach使用 - 张扬个性,敢为天下先
    来源:    发布时间: 2013-11-07

1. 读取记录
while($row=mysql_fetch_array($result))
{$record[]=array(
    'title'=>$row['title'],
 'body'=>$row['body'],);
}

$smarty->assign('yes', $record);//传说中的替换变量,即将$record赋给yes

 

2.在前台展示

{foreach item=news from=$yes}
{$news.title}:{$news.body}
<br>
{/foreach}


本文链接:http://www.cnblogs.com/zgaspnet/p/3270024.html,转载请注明。


    
[2]php获取 本月 本周 或者 下月 下周的 开始时间 结束时间 - Sudo高
    来源:    发布时间: 2013-11-07
<?php
$now_time = time();
$date=date("Y-m-d",$now_time);
function get_date($date,$t='d',$n=0)
{
if($t=='d'){
$firstday = date('Y-m-d 00:00:00',strtotime("$n day"));
$lastday = date("Y-m-d 23:59:59",strtotime("$n day"));
}elseif($t=='w'){
if($n!=0){$date = date('Y-m-d',strtotime("$n week"));}
$lastday = date("Y-m-d 00:00:00",strtotime("$date Sunday"));
$firstday = date("Y-m-d 23:59:59",strtotime("$lastday -6 days"));
}elseif($t=='m'){
if($n!=0){$date = date('Y-m-d',strtotime("$n months"));}
$firstday = date("Y-m-01 00:00:00",strtotime($date));
$lastday = date("Y-m-d 23:59:59",strtotime("$firstday +1 month -1 day"));
}
return array($firstday,$lastday);
}
$day1 = get_date($date,'d');
$day2 = get_date($date,'d',-1);
$week1 = get_date($date,'w');
$week2 = get_date($date,'w',-1);
$month1 = get_date($date,'m');
$month2 = get_date($date,'m',-1);
echo '<pre>';
print_r($day1);//今天
print_r($day2);//昨天
print_r($week1);//这周
print_r($week2);//上周
print_r($month1);//这月
print_r($month2);//上月
echo '</pre>';

 


本文链接:http://www.cnblogs.com/wlgaojin/p/3270266.html,转载请注明。


    
[3]深入理解PHP传参原理 - driftcloudy
    来源:    发布时间: 2013-11-07

首先说下今天想到的一个问题。在编写php扩展的时候,似乎参数(即传给zend_parse_parameters的变量)是不需要free的。举例:

PHP_FUNCTION(test)
{
char* str;
int str_len;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
RETURN_FALSE;
}

php_printf(str);

// 无需free(str)
}

运行正常:

test("Hello World"); // 打印Hello World

这里不用担心test函数会发生内存泄露,php会自动帮我们回收这些用于保存参数的变量。

那php究竟是如何做到的呢?要解释这个问题,还是得看php是怎么传递参数的。

EG(argument_stack)简介

简单来讲,在php中的EG中保存了一个专门用于存放参数的栈,名为argument_stack。每当发生函数调用的时候,php会将传入的参数压进EG(argument_stack)。一旦函数调用结束,则EG(argument_stack)被清理,并且等待下一次的函数调用。

关于EG(argument_stack)的struct结构、用途,php5.2和5.3实现有一些区别。本文主要以5.2为例,5.3+的变化后面抽空再说。

上图是5.2中argument_stack的大概示意图,看起来简单明了。其中,栈顶和栈底固定为NULL。函数接收的参数按照从左到右的顺序,依次被压入栈。注意,最后会被额外压入一个long型的值,表示栈里的参数个数(上图中为10)。

那被压入argument_stack的参数究竟是什么呢?其实是一个个zval类型的指针。它们指向的zva有可能是CV变量,有可能是is_ref=1的变量,还有可能是一个常量数字,或者常量字符串。

EG(argument_stack)在php5.2中被具体实现为zend_ptr_stack类型:

typedef struct _zend_ptr_stack {
int top; // 栈中当前元素的个数
int max; // 栈中最多存放元素的个数
void **elements; // 栈底
void **top_element; // 栈顶
} zend_ptr_stack;

初始化argument_stack

初始化argument_stack的工作是发生在php处理具体的请求之前,更准确说是处于php解释器的启动过程之中。

在init_executor函数里我们发现如下2行:

zend_ptr_stack_init(&EG(argument_stack));
zend_ptr_stack_push(&EG(argument_stack), (void *) NULL);

这2行分别代表着,初始化EG(argument_stack),紧接着压入一个NULL。由于EG是个全局变量,因此在实际调用zend_ptr_stack_init之前,EG(argument_stack)中的所有数据全部为0。

zend_ptr_stack_init实现很简单。

ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack)
{
stack->top_element = stack->elements = (void **) emalloc(sizeof(void *)*PTR_STACK_BLOCK_SIZE);
stack->max = PTR_STACK_BLOCK_SIZE; // 栈的大小被初始化成64
stack->top = 0; // 当前元素个数为0
}

一旦argument_stack被初始化完,则立即会被压入NULL。这里无须深究,这个NULL其实没有任何的含义。

NULL入栈之后,整个argument_stack的实际内存分布如下:


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3