好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

phplong类型写法 php len

很多站长朋友们都不太清楚phplong类型写法,今天小编就来给大家整理phplong类型写法,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 PHP中引用数据类型是什么 2、 27.6元怎么用long类型表示 3、 PHP对字符串到整型字段转换的时候长整型的字符串数据长度容易被截断,如何完成String到long类型的转换啊? 4、 时间戳 long 类型 5、 PHP变量名、变量值、类型 6、 如何获得一个php变量储存在内存中占用的空间大小 PHP中引用数据类型是什么

4种是标量类型:整型、浮点数、字符串和布尔型;两种是复合型:数组和对象;两种特殊类型:资源和NULL。

PHP里的整型和浮点数分别对应着C语言里的long和double类型。

PHP里的字符串是任何长度的字符序列。使用单引号和双引号分隔,但是单引号仅对 \ 和 ' 进行转义。

27.6元怎么用long类型表示

如图所示,我们点击箭头所指的Eclipse这个软件的图标,打开Eclipse软件。

如图所示,我们右击点击箭头所指的这个loop项目这个文件夹(loop就是英文“循环”的意思哦!)。

如图所示,在弹出的下拉列表菜单中,我们点击箭头所指的“新建”,之后依次点击“类”,来建立一个java的类文件。

如图所示,在弹出的对话框中,我们依次填写类的名称为“long1”(long意思为长的或很久的或冗长的),并且勾选箭头所指的矩形框,让Eclipse为我们自动创建java类的启动主函数,然后我们直接点击“完成(F)”按钮,即可创建一个java的类文件了。

如图所示,我们看到“long1”类文件已经创建出来,而且Eclipse为我们自动生成了一个java的启动主函数。

如图所示,long类型是64位数据,其取值范围是-2^63到2^63-1,以二进制表示的整数,默认值为0。我们先写一个long类型的声明方法,在这里我们声明了2个long类型的变量为hui和hui1,我们用java的打印语句打印出来。

图所示,我们直接进行字面值计算,我们再将计算的结果hui3打印出来。

如图所示,long类型的减法运算举例:先声明一个long类型的变量hui3用于接收hui-hui1的结果,最后将计算的结果hui3打印出来。

PHP对字符串到整型字段转换的时候长整型的字符串数据长度容易被截断,如何完成String到long类型的转换啊?

用这个试试:

sprintf( "%u", $row->playerid);

一般情况下并不需要转换格式,你只需要验证这个字符串($row->playerid)是正确的数字就可以直接进行计算了。php是弱类型的语言,一般情况下直接用就可以。

时间戳 long 类型

//通常获取时间戳方法time()、strtotime() 他们返回的都是 int 型

//int time ( void ) 

//int strtotime ( string $time [, int $now ] )

echo time() //1403006911

echo(strtotime("now")); //1403006911

PHP变量名、变量值、类型

变量名 =》 zval

变量值 =》zend_value

问题:

引用计数

变量传递,变量赋值

变量的基础结构

变量值:zend_value 

typedef union _zend_value {

  zend_long        lval;            /* long value */

  double            dval;            /* double value */

  zend_refcounted  *counted;

  zend_string      *str;

  zend_array      *arr;

  zend_object      *obj;

  zend_resource    *res;

  zend_reference  *ref;

  zend_ast_ref    *ast;

  zval            *zv;

  void            *ptr;

  zend_class_entry *ce;

  zend_function    *func;

  struct {

      uint32_t w1;

      uint32_t w2;

  } ww;

} zend_value;

变量名:_zval

typedef struct _zval_struct    zval;

struct _zval_struct {

  zend_value        value;        /* value */

  union {

      struct {

        ZEND_ENDIAN_LOHI_4(

            zend_uchar    type,          /* active type */

            zend_uchar    type_flags,

            zend_uchar    const_flags,

            zend_uchar    reserved)        /* call info for EX(This) */

      } v;

      uint32_t type_info;

  } u1;

  union {

      uint32_t    var_flags;

      uint32_t    next;                /* hash collision chain */

      uint32_t    cache_slot;          /* literal cache slot */

      uint32_t    lineno;              /* line number (for ast nodes) */

      uint32_t    num_args;            /* arguments number for EX(This) */

      uint32_t    fe_pos;              /* foreach position */

      uint32_t    fe_iter_idx;          /* foreach iterator index */

  } u2;

};

变量类型【type】

/* regular data types */

#define IS_UNDEF              0

#define IS_NULL                  1

#define IS_FALSE              2

#define IS_TRUE                  3

#define IS_LONG                  4

#define IS_DOUBLE              5

#define IS_STRING              6

#define IS_ARRAY              7

#define IS_OBJECT              8

#define IS_RESOURCE                9

#define IS_REFERENCE            10

/* constant expressions */

#define IS_CONSTANT                11

#define IS_CONSTANT_AST            12

/* fake types */

#define _IS_BOOL              13

#define IS_CALLABLE                14

/* internal types */

#define IS_INDIRECT                15

#define IS_PTR                17

true 和 flase 没有zend_value 结构, 直接通过type来区分,zend_long和double的变量指直接存储在_zend_value中,不需要额外的value指针。

如何获得一个php变量储存在内存中占用的空间大小

我们在前面的php高效写法提到,尽量不要复制变量,特别是数组。一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。下面我们可以粗略的估算PHP数组占用内存的大小,首先我们测试1000个元素的整数占用的内存:

[php] view plain copy print?

<?php

echo memory_get_usage() , '<br>';

$start = memory_get_usage();

$a = Array();

for ($i=0; $i<1000; $i++) {

$a[$i] = $i + $i;

}

$mid = memory_get_usage();

echo memory_get_usage() , '<br>';

for ($i=1000; $i<2000; $i++) {

$a[$i] = $i + $i;

}

$end = memory_get_usage();

echo memory_get_usage() , '<br>';

echo 'argv:', ($mid - $start)/1000 ,'bytes' , '<br>';echo 'argv:',($end - $mid)/1000 ,'bytes' , '<br>';输出是:

353352

437848

522024

argv:84.416bytes

argv:84.176bytes

大概了解1000

个元素的整数数组需要占用 82k 内存,平均每个元素占用 84 个字节。而纯 C 中整体只需要 4k(一个整型占用4byte * 1000)。memory_get_usage() 返回的结果并不是全是被数组占用了,还要包括一些 PHP运行本身分配的一些结构,可能用内置函数生成的数组更接近真实的空间:

[php] view plain copy print?

<?php

$start = memory_get_usage();

$a = array_fill(0, 10000, 1);

$mid = memory_get_usage(); //10k elements array;echo 'argv:', ($mid - $start )/10000,'byte' , '<br>';$b = array_fill(0, 10000, 1);

$end = memory_get_usage(); //10k elements array;echo 'argv:', ($end - $mid)/10000 ,'byte' , '<br>';得到:

argv:54.5792byte

argv:54.5784byte

从这个结果来看似乎一个数组元素大约占用了54个字节左右。

首先看一下32位机C语言各种类型占用的字节:

[cpp] view plain copy print?

#include "stdafx.h"

//#include <stdio.h>

int main() {

printf("int:%d\nlong:%d\ndouble:%d\nchar*:%d\nsize_t:%d\n",sizeof(int), sizeof(long),

sizeof(double), sizeof(char *),

sizeof(size_t));

return 0;

}

int:4

long:4

double:8

har*:4

size_t:4

在PHP中都使用long类型来代表数字,没有使用int类型大家都明白PHP是一种弱类型的语言,它不会去区分变量的类型,没有int float char *之类的概念。

我们看看php在zend里面存储的变量,PHP中每个变量都有对应的 zval, Zval结构体定义在Zend/zend.h里面,其结构:

[cpp] view plain copy print?

typedef struct _zval_struct zval;

struct _zval_struct {

/* Variable information */

zvalue_value value; /* The value 1 12字节(32位机是12,64位机需要8+4+4=16) */zend_uint refcount__gc; /* The number of references to this value (for GC) 4字节 */zend_uchar type; /* The active type 1字节*/zend_uchar is_ref__gc; /* Whether this value is a reference () 1字节*/};

PHP使用一种UNION结构来存储变量的值,即zvalue_value 是一个union,UNION变量所占用的内存是由最大成员数据空间决定。

[cpp] view plain copy print?

typedef union _zvalue_value {

long lval; /* long value */double dval; /* double value */struct { /* string value */char *val;

int len;

} str;

HashTable *ht; /* hash table value */zend_object_value obj; /*object value */} zvalue_value;

最大成员数据空间是struct str,指针占*val用4字节,INT占用4字节,共8字节。

struct zval占用的空间为8+4+1+1 = 14字节,其实呢,在zval中数组,字符串和对象还需要另外的存储结构,数组则是一个 HashTable:

HashTable结构体定义在Zend/zend_hash.h.

[cpp] view plain copy print?

typedef struct _hashtable {

uint nTableSize;//4

uint nTableMask;//4

uint nNumOfElements;//4

ulong nNextFreeElement;//4

Bucket *pInternalPointer; /* Used for element traversal 4*/Bucket *pListHead;//4

Bucket *pListTail;//4

Bucket **arBuckets;//4

dtor_func_t pDestructor;//4

zend_bool persistent;//1

unsigned char nApplyCount;//1

zend_bool bApplyProtection;//1

#if ZEND_DEBUG

int inconsistent;//4

#endif

} HashTable;

HashTable 结构需要 39 个字节,每个数组元素存储在 Bucket 结构中:

[cpp] view plain copy print?

typedef struct bucket {

ulong h; /* Used for numeric indexing 4字节 */uint nKeyLength; /* The length of the key (for string keys) 4字节 */void *pData; /* 4字节*/

void *pDataPtr; /* 4字节*/

struct bucket *pListNext; /* PHP arrays are ordered. This gives the next element in that order4字节*/struct bucket *pListLast; /* and this gives the previous element 4字节 */struct bucket *pNext; /* The next element in this (doubly) linked list 4字节*/struct bucket *pLast; /* The previous element in this (doubly) linked list 4字节*/char arKey[1]; /* Must be last element 1字节*/} Bucket;

Bucket

结构需要 33 个字节,键长超过四个字节的部分附加在 Bucket 后面,而元素值很可能是一个 zval 结构,另外每个数组会分配一个由arBuckets 指向的 Bucket 指针数组, 虽然不能说每增加一个元素就需要一个指针,但是实际情况可能更糟。这么算来一个数组元素就会占用54 个字节,与上面的估算几乎一样。

一个空数组至少会占用 14(zval) + 39(HashTable) + 33(arBuckets) = 86个字节,作为一个变量应该在符号表中有个位置,也是一个数组元素,因此一个空数组变量需要 118个字节来描述和存储。从空间的角度来看,小型数组平均代价较大,当然一个脚本中不会充斥数量很大的小型数组,可以以较小的空间代价来获取编程上的快捷。但如果将数组当作容器来使用就是另一番景象了,实际应用经常会遇到多维数组,而且元素居多。比如10k个元素的一维数组大概消耗540k内存,而10kx 10 的二维数组理论上只需要 6M 左右的空间,但是按照 memory_get_usage的结果则两倍于此,[10k,5,2]的三维数组居然消耗了23M,小型数组果然是划不来的。

关于phplong类型写法的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于phplong类型写法 php len的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did207457
更新时间:2023-05-03   阅读:34次

上一篇: php开发功能思路 php开发技术

下一篇:phpmtsql宿舍的简单介绍

相关资讯

最新资料更新

  • 1.php怎么操作树 php tree
  • 2.php循环处理速度 phpforeach循环
  • 3.php显示字段内容 php限制显示字数
  • 4.php大数据并发 php大数据处理思路
  • 5.PHP没有前景吗 php现在怎么样
  • 6.包含peintphp的词条
  • 7.php的如何使用数组if php中数组
  • 8.十荟团php开发怎么样 十荟团内部人士真实感受
  • 9.有哪些php社区 phpbbs
  • 10.php汉字搜索 php 搜索字符串
  • 11.php编程实验总结 php简单实训项目
  • 12.php数据抓取实例 php采集数据
  • 13.form居中显示php form居中显示
  • 14.php内存管理垃圾回收 php的垃圾回收机制是怎样的
  • 15.php接口和抽象类的区别 php抽象函数
  • 16.php求100的质数 php求出1100的素数
  • 17.关于PHPchmod的信息
  • 18.php常量乱码 phpstorm乱码
  • 19.php延迟0.1 php延迟执行不影响页面展示
  • 20.php下载表格 php下载功能

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]