正在加载......
类别:PHP心得  时间: 2008-12-30 20:47:02; 浏览: 11609; 评论: 0  

      一直以为PHP的变量是很灵活的,类型想怎么变换就怎么变换。

      但实际上并不是这样,当一个变量被赋值为数字时,是变换不了数组的,比如:

以下是代码片段:

[root@localhost shengting]# cat test.php
<?php
$a = 454;
$b = 6;
$a['gfgo'] = $b;

var_dump($a);
?>

[root@localhost shengting]# php test.php
PHP Warning:  Cannot use a scalar value as an array in /usr/home/shengting/test.php on line 4

Warning: Cannot use a scalar value as an array in /usr/home/shengting/test.php on line 4
int(454)

      从var_dump的结果看,不仅有Warning级的错误,赋值也没有成功。而,如果变量一开始是字符串的话,就没这回事情了:

以下是引用片段:

[root@localhost shengting]# cat test.php
<?php
$a = `454`;
$b = 6;
$a['gfgo'] = $b;

var_dump($a);
?>
[root@localhost shengting]# php test.php
sh: 454: command not found
array(1) {
  ["gfgo"]=>
  int(6)
}

      可以看出,赋值是成功的。

      应该,这个是和存储的类型是有联系的。同样,在Shell的Bash中,所有的变量的值都是以字符串方式存储的。尽管这个特性使得bash的数据处理起来很容易,但是也使得数字运算比较困难。原因就是数字也是以字符串的形式存储的,

      在Bash中,如果要对数字进行算术运算和逻辑操作,必须先转化为整数(可视为中间值),得到运算结果后再转化为字符串,以便正确的保存在Bash变量中。

      Bash提供了三种方式的数字数据进行算术变量:

以下是引用片段:

1:使用let命令。
2:使用shell扩展 $((expression))
3:使用expr命令

      具体用法就不说了,哈哈。偶比较喜欢使用第二种。

也许您对下面的文章感兴趣:
类别:随便说说  时间: 2008-12-29 21:16:29; 浏览: 144125; 评论: 1  

    今天通过Google Reader看见一米六二的北漂生活里的一个文章,说他“一直梦想着做一个NB的不行帅到让人拉一裤子的小东西”,看完文章,突然觉得很感动,这不也是我想做的么?!

     他弄的是一个叫做“小钱包”的网站,是“一个好玩的、简单的不能再简单了的在线记账应用”的网站。应用的确是很简单,可是当你自己根据兴趣去做一件事情的时候,难道不觉得很有成就感么?这个也是我从事互联网的引子,可是这种感觉随着工作而消逝,想着不禁觉得茫茫然。

     其实很早以前,我就一直想做一个小应用,管他几个人用,自己觉得爽就行。或许发展以后就成了潮流的东西,比如Google的“friend connect”,不就一个跨网站的友情链接么?这也是两年前我已经想到的东西,哈哈,YY一下!

     今天的一切,来自昨天的努力;明天的一切,来自今天的努力。

     坚持是一种美德,我一直在想根据现有的人力物力做一个小网站,初步功能已经成型,那就是一个博客导航的网站,地址:http://www.blogread.cn/

      这个小网站说白了,一个网址导航。在这里你可以提交你喜欢的博客,记得不要忘记写上博客的标签(又名“tag”),写上标签,你可以找到与之相似的博客。现在的功能很简单,但是我会一步一步在业余时间逐步增加功能,说不定你下次来,会发现它给了你一个惊喜!

     或许你会觉得界面不太好看,这的确是个郁闷的话题。不着急,美工会一步一步好的。您觉得不爽可以下次再来看看:)

     本不想现在介绍我的博客导航,毕竟还不完善。但是看到一米六二的文章,突然有种冲动就写上以上的文字。

      做事情,是需要激情的,不然会一直拖着,直到消逝而去。

也许您对下面的文章感兴趣:
类别:Linux/Unix  时间: 2008-12-19 12:18:51; 浏览: 32387; 评论: 0  

      昨天发现一个很奇怪的bug,一个分析log的程序,一个小时产生一个log文件,文件名中含有当时的小时数以作标识,其中小时为有前导零的24 小时格式。bug是第08和09小时的log为空,甚为诧异。

      分析程序后,定位于08和09这两个数字上。程序中有一步需要对小时数进行数学运算,问题就在于此,例如:

以下是代码片段:
[root@login yayu]# echo $((08 -2))
bash: 08: value too great for base (error token is "08")

      Google了一下找到了答案:原文点这![建议新窗口打开]

      原因:

以下是代码片段:
Numbers starting with leading 0 are Octal numbers  (base 8) in many programming
languages including C, Perl and shell. Valid octal digits are
0,1,2,3,4,5,6,7 so it barfs if it sees an 8 or a 9. You probably want
to work in straight numbers and make a leading 0 in your output
format with a sprintf("%02d") kind of formatting thing.
Anything starting with 0x or 0X is a hex number.

So the error message means exactly as it says- it's an error from
the let function complaining about the value being too big for the base.

Have fun,
Stuart.

      解决方案:

以下是代码片段:
You can explicitly state the base of a number using base#number
Code:
if [ $((10#$item)) -eq 0 ] ; then
That will have trouble if the number starts with a minus sign.
The '-' needs to be in front of the base like -10#009 for -9.

      原来是进制的问题,C, Perl 和 shell中以0开头的数字是八进制了,而在运算中也是严格如此,不会做自动转化,于是就报错了。如下解决:

以下是引用片段:
[root@login shengting]# echo $((10#08 -2))
6

      纠结问题的根源,还是我的shell写得太烂了......如果命令用得好就不会遇到这个bug了,不过写得好了,又怎么会在以后避免进制导致的问题呢?到底是先有鸡还是先有蛋呢?

也许您对下面的文章感兴趣:
类别:MySQL学习  时间: 2008-12-10 12:24:26; 浏览: 19808; 评论: 1  
Tags : 外键
类别:随便说说  时间: 2008-12-02 12:52:47; 浏览: 85923; 评论: 0  
类别:Linux/Unix  时间: 2008-11-28 22:30:26; 浏览: 75074; 评论: 0  
类别:随便说说  时间: 2008-11-19 19:18:05; 浏览: 93216; 评论: 3  
Tags : 生活
类别:随便说说  时间: 2008-10-23 23:28:51; 浏览: 21186; 评论: 0  
Tags : 工作 职业
类别:随便说说  时间: 2008-10-22 16:07:59; 浏览: 31307; 评论: 0  
类别:Linux/Unix  时间: 2008-10-14 22:37:13; 浏览: 52587; 评论: 0  
Tags : man 命令
[199][5/20][1][2][3][4][5][6][7][8][9][10][>|] | 回页首
© 2004 - 2020 芽雨快跑 - 本页面所有内容,未经芽雨许可,欢迎转载,请注明出处

京ICP备09017802号