免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8993 | 回复: 9
打印 上一主题 下一主题

乔大姐,知道如何用PHP生成结构体吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-26 10:05 |只看该作者 |倒序浏览
乔大姐,知道如何用PHP生成结构体吗?

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2007-12-26 10:59 |只看该作者
原帖由 帅的不能再输啦 于 2007-12-26 10:05 发表
乔大姐,知道如何用PHP生成结构体吗?


用类模拟:

  1. <?php
  2. Class structExample{
  3.         public $a;
  4.         public $b;
  5.         public $c;
  6.    function __construct() {
  7.        settype($this->a,'float');
  8.        settype($this->b,'int');
  9.        settype($this->c,'string');
  10.    }
  11. }

  12. $s1 = new structExample();
  13. $s2 = new structExample();
  14. $s1->a = 1.1;
  15. $s2->a = 2.2;

  16. $s1->b = 3;
  17. $s2->b = 4;

  18. $s1->c = "5";
  19. $s2->c = "6";

  20. print_r($s1);
  21. print_r($s2);
  22. ?>
复制代码

论坛徽章:
0
3 [报告]
发表于 2007-12-26 11:16 |只看该作者

呵呵.

哦,我明白你的意思了.
但是,比如字符串类型的"test",占了50个位,那么,我如何在"test"后填充剩余的46个空位呢?

论坛徽章:
0
4 [报告]
发表于 2007-12-26 11:33 |只看该作者

这样写怎么样?

<?php
Class struct{
    var $a;
    var $b;
    var $c;
    function __construct() {
        pack("f10", $this->a);
        pack("I10", $this->b);
        pack("h10", $this->c);
        settype($this->a,'float');
        settype($this->b,'int');
        settype($this->c,'string');
    }
}

$s1 = new struct();
$s2 = new struct();
$s1->a = "1.1";
$s2->a = "2.2";

$s1->b =  "3";
$s2->b =  "4";

$s1->c =  "test1";
$s2->c = "test2";

print_r($s1);
print_r($s2);

论坛徽章:
0
5 [报告]
发表于 2007-12-26 15:05 |只看该作者
LZ,学习下..................
pack函数怎么用呢?我看了手册没太明白,可以讲解下吗? 谢谢.

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
6 [报告]
发表于 2007-12-26 15:13 |只看该作者

  1. <?php
  2. Class struct{
  3.     private $v = array(
  4.                         'a'=>array('int',        0,                null),
  5.                         'b'=>array('float',        0,                null),
  6.                         'c'=>array('string','50',        null),
  7.                 );

  8.         private function __set($nm, $val){
  9.                 if (isset($this->v[$nm]))
  10.                 {
  11.                         settype($this->v[$nm][2] = $val,$this->v[$nm][0]);
  12.                         if ($this->v[$nm][0] == 'string')
  13.                         {
  14.                                 $this->v[$nm][2] = substr($this->v[$nm][2] . str_repeat(' ',$this->v[$nm][1]),0,$this->v[$nm][1]);
  15.                         }
  16.                 }
  17.                 else
  18.                 {
  19.                         throw new Exception("$nm isn't my member!");
  20.                 }
  21.         }
  22.         private function __get($nm){
  23.                 if (isset($this->v[$nm]))
  24.                 {
  25.                         return $this->v[$nm][2];
  26.                 }
  27.                 else
  28.                 {
  29.                         throw new Exception("$nm isn't my member!");
  30.                 }
  31.         }
  32. }

  33. $s1 = new struct();
  34. $s2 = new struct();
  35. $s1->a = 1;
  36. $s2->a = 2;

  37. $s1->b =  3.3;
  38. $s2->b =  4.4;

  39. $s1->c =  "test1";
  40. $s2->c = "test2";

  41. var_dump($s1->c);
  42. var_dump($s2->c);
复制代码


可以这么做,只是一个例子。

论坛徽章:
0
7 [报告]
发表于 2007-12-26 16:02 |只看该作者
:wink: 为什么要初始化要补null值呢?不是更浪费资源吗?
pack能给俺讲下吗?

论坛徽章:
0
8 [报告]
发表于 2007-12-26 17:49 |只看该作者
pack是指定对界,以pack中指定的值对齐。当然只有在pack指定的值小于结构体中最大的长度时才起作用。

论坛徽章:
0
9 [报告]
发表于 2007-12-26 21:51 |只看该作者

............

谢谢乔大姐.
有朋友问如何用PACK
pack("a55ia66a18",$str1,$int1,$str2,$str3);

论坛徽章:
0
10 [报告]
发表于 2007-12-27 14:03 |只看该作者
是把给定字符串转换成设定类型的字符串?
pack("c",65);把65转换成字符型?
不知道理解的有问题没.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP