这是PHP开发基础快速入门的第三篇文章,前两篇文章介绍了PHP的大致用法,书接上回,之前的文章对PHP的开始结束标记有过简单描述,这次详细唠唠PHP的标记相关知识以及程序注释等内容
可以根据操作数的个数分为一元运算符,二元运算符,三元运算符。一元运算符只运算一个值,比如:上图中的取反运算符(!)或自增自减运算符(加一元运算符)(++,--)。二元运算符可以运算两个值,PHP支持大多数运算符都是二元运算符。而三元运算符只有一个(...?...:...)。如果按运算的不同功能去分类,可以分为算术运算符,字符串运算符,赋值运算符,比较运算符,逻辑运算符,位运算符和其他运算符。而本文要详细介绍的就是算术运算符,这也是我们在开发中最常用且最重要的运算符之一
算术运算符的使用非常容易,与我们在数学中使用运算符的方式是一样的,不过使用算术运算符应该注意,除号(/)和取余运算符(%)的除数不能为0,也是除数不能为0, 在程序中同样需要遵守所有的数学规则.另外,对于非数值类型的操作数,PHP在算术运算时会自动将非数值类型的操作数转换成一个数字。变量的类型转换,后续文章会详细介绍。敬请期待!~在这里着重介绍“%”、“++”和“--”三个算术运算符的在PHP中的使用,取模运算符(%)也称取余运算符。在PHP语言中在做求模运算时首先会将%运算符两边的操作数转换为整型(如int型:也就是我们所说的整数),然后返回一个操作数除以第二个操作数后所得到的余数。在程序开发时使用取模运算符通常有两个目的:<?php
$a = 10 % 3; //使用两个整数进行取模运算
var_dump($a); //输出整型的余数1
$b = 10.9 % 3.3; //使用两个浮点数进行取模操作
var_dump($b); //输出整型的余数1
$c = "10ren" % "3ren"; //使用两个字符串进行取模运算
var_dump($c); //输出整型的余数1
//计算是否闰年
$year = 2022;
if(($year % 400) == 0 || (($year % 100) != 0 && ($year %4) == 0)){
echo $year . "是闰年";
}else{
echo $year . "是平年";
}
echo '<br>';
$num = rand()%10; //获得一个10以内的随机数
echo $num;
在编程中,最常见的运算时对一个变量进行加1的或者减1的运算操作,虽然不是本文的重点,但是不得不提的就是赋值运算符,赋值运算符是所有编程语言当中最重要的运算符,赋值运算符可以改变变量的值,也可以写成(+=)这种方式计算递增变量的值,还可以使用(-=)计算递减变量的值.PHP也提供了另外两个不寻常的算术运算符,来执行递增和递减的运算。分别称为递增(自增)和递减(自减)运算符,即“++”、“--”。自增和自减常用于循环之中。自增和自减是一元运算符,这两个运算符并不只是递增和递减的另一个选项,在进一步应用PHP的过程中,就可以看出它们的更多的用处和价值,比如下面的代码:<?php
$a = 1;
$a = $a + 1; //$a变量加1后再赋值给这个变量
$a += 1; //使用赋值运算符在原变量上加1
++$a; //使用自增运算符递增1
下面我们看看具体的例子:<?php
$a = 10;//定义变量$a,赋值10
$b = $a++;//后自增
?>
以上两条语句被执行后,$a的值为11,而$b的值是10;首先是将$a的值赋给$b,然后将$a的值加1,而下面的语句被执行后,$a和$b的值都是11,首先将$a的值加1,然后将$a的值赋给$b:<?php
$a = 10;//定义变量$a,赋值10
$b = ++$a;//前自增
?>
<?php
$a = 15; //声明变量$a赋值15
$b = $a++ + ++$a; //先用$a的值加上$a自增1后再自增1的值17,再赋值给$b
//输出结果
echo $a;
echo '<br>';
echo $b;
echo '<br>';
$b = $a-- - --$a; //先用$a的值17减去$a自减1后再自减1的值15,再赋值给$b
//输出结果
echo $a;
echo '<br>';
echo $b;
另外,在处理字符变量的算术运算时,PHP沿袭了Perl语言的习惯,而非C语言的.比如:在Perl中,'Z' + 1 将得到 'AA';而在C语言中,'Z'+1将得到'['(ord('Z')==90, ord('[')==91)。注意字符变量只能自增,不能自减,并且只支持纯字母(a-z和A-Z)。比如:涉及到字符变量的算术运算如下:<?php
$i = 'a';
for($n=0;$n<52;$n++){ //循环自增52次
echo ++$i . "\n"; //$i自增
}
注:自增或者自减运算符不会影响布尔值,自减NULL值也没有效果,但是自增NULL的结果是1<?php
$name = "李白";
$age = 19;
$height = 1.92;
echo $name . "身高:". $height . "米" . "今年" . $age . "岁"
?>
<?php
$a = '123' + '345';
$b = 'abc123' + '345';
echo $a;
echo '<br>';
echo $b;
?>
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当