今天一个同事在吐槽 lua 不好使,然后发我一段代码
locla test = {}
test['a'].b = 0
我:“??? a 对应的对象没有初始化直接访问 b 属性不是崩崩崩?”
回:“js 和 php 都能这么写啊...”
我:“php 我写的少,js 这不是典型的 property of undefined 么?正常语言但凡有一个不报错的都见鬼了”
于是人回了我一段
var test = {};
test['hasOwnProperty'].b = 0
我:“... hasOwnProperty 是特么的通用函数,有对象的好么?你写段 php ”
$test = array();
$test["a"]["b"] = 1024;
print($test);
这见鬼的代码竟然不报错...
1
everyx 2022-03-12 17:29:47 +08:00
也要看你用的 PHP 版本 😂
|
2
eason1874 2022-03-12 17:46:44 +08:00 2
这已经是正经代码了
我接触的一些 PHP 项目充满奇怪写法,把日志等级调到警告之后,警告日志以每秒几 MB 的速度增长,但是程序能正常跑 |
3
westoy 2022-03-12 17:52:44 +08:00
我还以为是啥, 那是你都没见过中古用 @一把梭哈的代码........
|
4
zakokun 2022-03-12 18:03:00 +08:00
你这同事稀里糊涂的。
php 的$test["a"]["b"] = 1024 作用是初始化二维数组并赋值。这个不会报错的。 如果弄个 $test["a"]->b = 1024 不报错才有鬼了。 |
5
dobelee 2022-03-12 18:07:39 +08:00 via iPhone 1
在 php 中这段代码的意思是给二维数组中的 b 赋值,不是没报错,是根本没有错误。
|
6
encro 2022-03-12 18:12:32 +08:00
PHP 开发环境不开 notice 级别错误显示,就是个二哈。
|
7
maigebaoer 2022-03-12 19:00:53 +08:00 via Android
php 多维数组赋值和对象属性赋值没联系
|
8
qeqv 2022-03-12 19:21:53 +08:00 1
PHP 的数组,想怎么用怎么用,终极省心。没有什么数据结构是一个数组解决不了的,如果有,就两个
|
9
sadfQED2 2022-03-12 19:23:12 +08:00 via Android 1
我以为啥呢,世界第一编程语言,代码一堆 error 错误,然而丝毫不影响程序正常运行
|
10
wonderfulcxm 2022-03-12 19:29:38 +08:00 via iPhone
lua 的 table 很强大,可以表达别的语言中的数组、哈希表、对象,PHP 的数组可以表达别的语言中的数组、哈希,这么写没毛病,是对象是另外一种写法,而且不会用 print 来调试数组,不像 js 的数组就真的只是数组。
|
11
wonderfulcxm 2022-03-12 19:34:35 +08:00 via iPhone
是对象是另外一种写法
->而对象是另外一种写法 |
12
Buges 2022-03-12 19:36:17 +08:00 via Android
初始化(声明)和赋值的混淆可以说是动态语言的一大糟粕。
|
13
jousca 2022-03-12 19:41:16 +08:00
PHP 是个神奇牛逼的语言……
|
14
james122333 2022-03-12 19:50:42 +08:00 via Android
动态语言就是要方便 不然相比那些啰嗦的语言有什么长处 js 也很神奇 对象与数组分不清楚
|
15
newtype0092 2022-03-12 19:53:09 +08:00
@qeqv lua:我的 table 今天就要和你比一比~
|
16
charlie21 2022-03-12 20:22:51 +08:00
php 里没有字典,因为 array 就是字典。说起神奇,这就不得不提到 stackoverflow php 区的名场面了:
如何取得 php 数组的最后一个元素 php array last element speed - Google Search https://stackoverflow.com/questions/3687358/whats-the-best-way-to-get-the-last-element-of-an-array-without-deleting-it/41795859#41795859 |
17
yaott2020 2022-03-12 20:59:17 +08:00 via Android
确实,PHP 很人性化,写起来很爽(不然怎么敢叫自己最好的编程语言)
|
18
buffzty 2022-03-12 21:14:04 +08:00 1
应该五六年前 php 就能写得跟 java 一模一样了,除了泛型没有. 他有垃圾语法你为什么要去用呢. 任何语言都可以写出垃圾.
人的问题非要怪到语言上. |
19
guyeu 2022-03-12 21:31:16 +08:00
locla 是个 typo 吧,如果这都能跑的话确实有点惊讶
|
20
airplayxcom 2022-03-12 21:35:54 +08:00
PHP 天下第一 怎么能错!
|
21
darklinden OP @guyeu 确实…手抖了…
|
22
xiangyuecn 2022-03-12 22:24:27 +08:00
糖吃多了 100%蛀牙
|
23
retrocode 2022-03-12 22:26:38 +08:00
php 这个是真的吊 妹的 自己写爽的呀批
一旦接手老项目就是噩梦的开始,反正怎么写都是对的,经手的人越多神奇的写法越多=.= |
24
xiangyuecn 2022-03-12 22:30:50 +08:00
|
25
maigebaoer 2022-03-12 22:54:02 +08:00 via Android
@buffzty php8 有泛型了😎
|
26
MengiNo 2022-03-12 23:15:36 +08:00
@maigebaoer 并没有,只是多了个 TS 那种 联合类型 可以少定义几个接口罢了,而且还远没有 TS 那套完善。哪怕到现在 PHP8.1 还是连最基本的限制数组内的每个元素的类型保持一致,这种最基本的需求都无法实现。只能自定义一个继承自 ArrayObject 的类,通过构造函数 __construct(Type ...$data) 这样来模拟实现。本来这倒问题不大,但是 PSR4 要求一个 .php 文件只能有一个类,这样就导致了上面那种实现方式要搞出非常多重复的类(文件),非常不优雅让人难以接受。
|
27
Kiriya 2022-03-12 23:21:34 +08:00
PHP 和你只要有一个能跑就行了
|
28
buffzty 2022-03-12 23:24:28 +08:00
我觉得 php 的那个 union 类型是完完全全的鸡肋.我不会用这种东西. 要么就纯数组,如果需要元组就用对象代替.
|
29
maigebaoer 2022-03-12 23:35:58 +08:00 via Android
@MengiNo 谢谢指出,刚去查了下,语言本身确实是没有,只能用 docblock 加静态分析器。我记得数组元素不支持类型限制,主要是出于性能考虑。同文件不能定义多个类,确实不方便。我个人还是挺喜欢 php 这门语言,心智负担低。
|
30
gyinbj 2022-03-12 23:49:45 +08:00 1
这就是为什么 phper 不是在挖坑的路上,就是在填坑的路上。
每天都有小惊喜。 |
31
mostkia 2022-03-13 11:03:21 +08:00
php 不清楚,js 应该是无法做到 test = {}; test['a'].b = 0;这句的,js 中的对象确可以未创建先使用,但仅限于第一维,不能直接访问未创建对象的子对象,否则会报 undefined 错误
|
32
aristolochic 2022-03-13 15:30:03 +08:00 1
所以……就是 https://en.wikipedia.org/wiki/Autovivification ?
应该是 Perl 带起来的概念吧。 |
33
cszchen 2022-03-13 16:49:09 +08:00 via iPhone
php 这个会有报错,不过是 notice 级别,可能他屏蔽了,离他远点
|
34
leonlu 2022-03-13 17:12:53 +08:00 via iPhone
js 的那个肯定不行呀
|
35
vibbow 2022-03-13 19:07:25 +08:00
|
36
NSAgold 2022-03-14 10:31:51 +08:00
《 Why php is the best programming language 》
|
37
james122333 2022-03-14 14:04:51 +08:00
@MengiNo
直接不定义类型就可以了 反正到最后还是要判断 也没必要死磕 psr-4 你可以自写个 loader 原生 array 本身就是这么用的 需要类型可以自便 要求语言本身就要有不一定需要的东西是很糟糕的 只能说是一种习惯 |
38
fpure 2022-03-15 09:47:19 +08:00
刚刚在线测试了一下你的 lua 代码,并不能这么写
你可以试试 https://c.runoob.com/compile/66/ |
39
fpure 2022-03-15 09:48:08 +08:00
```lua
local test = {} test['a'].b = 0 ``` |