回复内容:
写JavaScript之前听人说不用理会变量的类型,直接用就好。然后各种进坑。。明明是区分的好吧,只是语言上不明显表示出来,另外附带一些不太智能的类型自动转换。
弱类型语言确实比较好入门,但要想精通还是不能忽略变量类型的。
另外,问题如果能在运行时外解决,干嘛要带进去呢。 最近javascript写得多深有体会。本来我就知道弱类型语言就是很容易写出翔,于是我牺牲了一点性能到处assert,加载一个页面assert了两千多次,证明效果还是很不错的。然而,浏览器并不会像Visual Studio一样,可以在任何情况下都非常直接的告诉我,到底哪个assert中了。更可恶的是,像C++/C#这样的语言,exception被catch的时候是会保留throw的那一刻的debug信息的,javascript直接就先unwind stack了再catch,还得苦逼的展开error对象的内容,人肉看stack information,自己跳过去,然而此刻本地变量早就丢了……
特别怀念写http://ASP.NET的时候,可以用Visual Studio来调试浏览器里的代码的日子。
php估计也差不多。 弱类型不严谨,在对类型要求比较严格的情况下就需要注意异常情况:比如接收参数时需要判断是int型,但是php收到的全部都可以当成字符串,要自己用intval之类的函数转换;有时候判断需要“===”才能保证不出问题。c#是不用担心这些的,类型不匹配在写代码的时候就报错了。
弱类型的优势有一个很好的例子就是操作json,php用json_decode函数一下就变成了一个数组,数组在php中是万能结构,想怎么用就怎么用。c#解json就有点复杂了,每一个值都要转换成对应类型,就是说你解析之前就要明白里面是什么结构,每个值是什么类型。 我猜题主其实想问的是动态类型语言和静态类型语言 在“严谨”的语言中,通常是预先定义好一个值的类型,自始至终,变量的类型是固定的。
对比起强类型,弱类型的缺点大概如下:
(1)弱类型不符合“所见即所得”,定义的变量类型是不可预见并且可以改变的。
(2)为了兼容弱类型,语言执行引擎要做了大量的兼容工作,包括类型识别,内存管理,类型转换等,增加了语言内部处理的复杂度,会导致执行效率的降低。
(3)变量的类型是不可控的,因此执行过程中拥有大量的变量类型“隐形转换”,在开发同学不清楚隐性转换规则的情况下,容易产生不可预知的结果。这个特性也完全不符合所见即所得的简单性。
但是,它们之所以可以发展起来,脱颖而出,也是有原因的,存在就有它的道理。
弱类型等语言特性,降低了程序员编写语言的门槛。编程言语是人类和机器沟通的桥梁,终极追求其实是“降低人和机器的沟通成本”,追求“人人皆可编程”的境界。
例如,从机器语言的0和1开始,后来变成汇编语言,汇编语言发展出来C,后来再有现在的脚本语言。编程学习的门槛不断降低,程序员的数量也随着指数增长。
而且,我相信未来还会继续发展出更低学习门槛的语言,促进程序员数量的再一次指数增长。
弱类型的语言也有优点:
(1)屏蔽了语言的复杂性和容易导致错误的地方,例如:内存管理、指针、变量的类型等。虽然,它屏蔽了比较复杂的特性,但是,并不代表它们不存在,这样的做法是对人友好(编程更简单,考虑的东西更少),但是对机器不友好。
(2)项目开发效率高。
(3)学习门槛低。
它虽然带有不少的问题,但是,也包含了很明显的优点。
PHP比较大范围地用于Web开发,Javascript统治浏览器端的开发,这些都不是偶然现象,而是人用脚投票选择出来的。
当然,术业有专攻,不同的语言解决不同场景的问题,不能一概而论。 比如fastCSharp,无论是开发效率还是运行效率,随时欢迎各位PHPer挑战。
弱类型语言有两个优势:一是eval,其实我真的不知道这算不算优势;二是有弱类型需求的情况下,代码相对于强类型语言更优雅(一行少敲几下键盘)。
弱类型语言的劣势太多太多,可以说满身都是,只是很多人不愿意承认而已。 弱类型比较重要的好处主要在于给另一些语言特性的实现带来的便利性。比如闭包和回调函数。PHP我不懂,不过javascript大量依赖的回调函数和衍生出来的error first callback pattern等东西,在强类型语言里会不好实现。当然也有别的非弱类型实现,比如Ruby会用argument as hash之类的手段来回避函数签名不一致之类的问题。
之前很多人提到理想中的语言应该有optional static typing。其实放到strong/weak typing上或者也是一样,最理想的是optional weak typing。只是我认为除非必要,否则不在编译期检查类型,所以应该是dynamic typing为缺省,显式的声明static typing。而强弱这边则应该是缺省强类型,显式声明弱类型(即明确表示内容convertible)。
不过目前看来还没有人整这样一门语言,XD,现有的凑合着用吧。 PHP的优势在于
PHP 是最好的语言好吧,我再说一遍等于我也有责任。
PHP是弱类型语言,容易出现什么问题呢?举个栗子。
<span class="cp"><?php</span>
<span class="cm">/*</span>
<span class="cm">strpos(string, find)</span>
<span class="cm">返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。</span>
<span class="cm">*/</span>
<span class="nv">$string</span> <span class="o">=</span> <span class="s1">'zhihu'</span><span class="p">;</span>
<span class="nv">$find</span> <span class="o">=</span> <span class="s1">'h'</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">strpos</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$find</span><span class="p">)</span> <span class="o">==</span> <span class="k">false</span><span class="p">)</span>
<span class="k">echo</span> <span class="s1">'not found'</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nb">strpos</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$find</span><span class="p">))</span>
<span class="k">echo</span> <span class="s1">'not found'</span><span class="p">;</span>
<span class="nv">$find</span> <span class="o">=</span> <span class="s1">'z'</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">strpos</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$find</span><span class="p">)</span> <span class="o">==</span> <span class="k">false</span><span class="p">)</span>
<span class="k">echo</span> <span class="s1">'not found'</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nb">strpos</span><span class="p">(</span><span class="nv">$string</span><span class="p">,</span> <span class="nv">$find</span><span class="p">))</span>
<span class="k">echo</span> <span class="s1">'not found'</span><span class="p">;</span>
<span class="cp">?></span><span class="x"></span>

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

在PHP中,trait適用於需要方法復用但不適合使用繼承的情況。 1)trait允許在類中復用方法,避免多重繼承複雜性。 2)使用trait時需注意方法衝突,可通過insteadof和as關鍵字解決。 3)應避免過度使用trait,保持其單一職責,以優化性能和提高代碼可維護性。

依賴注入容器(DIC)是一種管理和提供對象依賴關係的工具,用於PHP項目中。 DIC的主要好處包括:1.解耦,使組件獨立,代碼易維護和測試;2.靈活性,易替換或修改依賴關係;3.可測試性,方便注入mock對象進行單元測試。

SplFixedArray在PHP中是一種固定大小的數組,適用於需要高性能和低內存使用量的場景。 1)它在創建時需指定大小,避免動態調整帶來的開銷。 2)基於C語言數組,直接操作內存,訪問速度快。 3)適合大規模數據處理和內存敏感環境,但需謹慎使用,因其大小固定。

PHP通過$\_FILES變量處理文件上傳,確保安全性的方法包括:1.檢查上傳錯誤,2.驗證文件類型和大小,3.防止文件覆蓋,4.移動文件到永久存儲位置。

JavaScript中處理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。 1.??返回第一個非null或非undefined的操作數。 2.??=將變量賦值為右操作數的值,但前提是該變量為null或undefined。這些操作符簡化了代碼邏輯,提高了可讀性和性能。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3漢化版
中文版,非常好用