1
bearcat001 2014-05-17 21:23:15 +08:00
C里为了避免把判断写成赋值,一般这样做
if (3 == a) |
2
bearcat001 2014-05-17 21:27:22 +08:00 1
没写完就提交了...
编译器会报错的,PHP也一样 所以赋值用 $a = 3 ,判断反过来写 3 == $a |
3
for4 2014-05-17 21:46:36 +08:00
这个要看是什么语言。
大部分语言是不建议这样写的。 |
4
for4 2014-05-17 21:47:11 +08:00
没看到TAG ,
PHP里面 不要这样写 |
5
ashitaka 2014-05-17 21:49:01 +08:00
第一种方法比较好 意图很明显 判断$a 的值是否为空
第二种意图混乱 你到底是判读$a 的值是否为空 还是$a的值是否为'foo' 虽然此处按 lz 的意思是前者 但是当代码给别的人看时 就要通过判断来推测原作者意图了 |
6
raincious 2014-05-17 21:57:14 +08:00
看习惯。两种代码没有区别,只是节省了行数。属于小Trick类型的语法。
个人倾向于如果$a接受的是函数返回值,那么无所谓了。但是如果接受的是变量set,那么上面的语法是没有意义的。 $a = 'foo'必然不是false,所以if里面的语法必然会被执行。所以简直不如就是 $a = 'foo'; echo $a; |
7
Jat001 OP |
8
Wy4q3489O1z996QO 2014-05-17 22:16:34 +08:00
@Jat001 一般后面需要用到$a 才这样写,即完成判断,又完成赋值。
|
9
yukirock 2014-05-17 22:18:53 +08:00
既然是給 $a 賦值爲字符串常量,那麼爲什麼又要做一次 if 判斷呢?
這樣的代碼是不是重構可能更好? |
10
zythum 2014-05-17 22:23:09 +08:00
|
11
jsonline 2014-05-17 22:24:30 +08:00 via Android
等你哪天遇到坑了就知道了。
|
12
jsonline 2014-05-17 22:25:47 +08:00 via Android
写代码最好的习惯是,每一行都 donot make me think.
|
13
raincious 2014-05-17 22:26:42 +08:00 1
@yukirock
对编译器来说基本山是一回事。但是多了一行,很多人感觉不爽,包括我。 @Jat001 还是看规范的问题。PHP的PSR2没有规定这样的内容,可以理解为它把这个交给了程序员自行组织。 如果你能制定规则的话,那么可以指定一个规则来约束程序员的写法。如果不能的话,可以这样改变自己的思维来适应: 你想要检查$_GET['foo']这个里面的值是不是设定,包括是空白,那么原先的写法事实上是 if (trim($_GET['foo'])) { // 外部变量请自行isset $a = $_GET['foo']; // TODO } 然后你发现,这样浪费了一行,自然要想办法修改,那么就顺理成章的改成了 if ($a = trim($_GET['foo'])) { // TODO: Use $a } 个人感觉可读性差别不大,而且个人也没有因为这个出过错。可能只是对待刚刚入门的新人时应该注意下。 |
14
messense 2014-05-17 22:27:38 +08:00
最近看 APUE 里面其实很多赋值语句写在 if 里,不过一般是这样的:
int fd; if ((fd = open("/dev/null", O_RDWR)) < 0) { fprintf(stderr, "open error"); exit(1); } |
15
raincious 2014-05-17 22:28:41 +08:00
@raincious 哦,说错了:
- 你想要检查$_GET['foo']这个里面的值是不是设定,包括是空白,那么原先的写法事实上是 + 你想要检查$_GET['foo']这个里面的值是不是非空,包括是空白,那么原先的写法事实上是 |
16
nicai000 2014-05-17 22:28:50 +08:00
极其讨厌楼主和一楼的写法
|
17
hhkbp2 2014-05-17 22:29:26 +08:00
不是太好,不过go...
|
18
Jat001 OP @raincious 我一般这样写
$a = trim($_GET['foo']); if ($a) { //do some thing } 可公司的代码基本是这样写的 if ($a = trim($_GET['foo'])) { //do some thing } 因为我有强迫症,所以要发个帖子问问…… 另外我也写 shell 脚本,在 shell 中,一个等号与两个等号是一样的,都是比较运算符。 |
19
explon 2014-05-17 22:36:48 +08:00
你的举例不对,公司大部分逻辑是这样子的,基本赋值的是一个数组,存在下面执行循环
if ($inbox_dialog = $this->model('message')->get_inbox_message($_GET['page'], get_setting('contents_per_page'), $this->user_id)) { foreach ($inbox_dialog as $key => $val) { |
21
alsotang 2014-05-17 22:41:06 +08:00
不是好习惯
|
23
explon 2014-05-17 22:49:01 +08:00
|
25
Jat001 OP @explon 就举了俩个简单的例子,方便理解。
第一个例子可能举的确实不好,但在第二例子中 $_GET['foo'] 有可能是空格,tab,换行符等,所以 $a = trim($_GET['foo']) 返回的可能是 false。 但我想问的是,把赋值和判断写一块好不好?是否易于理解,是否容易出错,对新手是否友好等? |
26
explon 2014-05-17 23:10:33 +08:00 via iPhone
@Jat001 我们程序不会像你举例这样写,if 中赋值的情况只有在对函数处理后返回判断变量是否有数据(非字符串处理),是则下面要对数据进行二次处理的情况下出现,你的理解错了。
准确的说我们程序的代码风格很大是受了国外一款著名商业论坛程序 vBulletin 3 的影响,你有兴趣可以下一个看一看 |
29
nekop 2014-05-18 01:08:54 +08:00
Objective-C程序员表示OK!
|
30
solupro 2014-05-21 15:53:00 +08:00
|