php - 类型安全的语言是否需要静态类型?

标签 php programming-languages type-safety dynamic-typing static-typing

我正在尝试理解类型安全的语言意味着什么。在动态类型语言中,类型检查是在运行时执行的,例如,如果我运行以下 PHP 代码:

<?php
class MyClass
{ 
}

// Create a MyClass instance
$mc = new MyClass();

// Create an int variable
$i = 1234;

// Add $mc and $i
$result = $mc + $i;
?>

我会得到一个错误,因为 + operator 不支持 MyClass 数据类型。所以基本上类型检查是在运行时执行的。

类型安全是指无论是在编译时还是运行时都执行类型检查,还是意味着类型检查必须只在编译时执行,因此必须明确地为每个变量指定数据类型(如 C、Pascal、Java 等)。

最佳答案

“类型安全”通常表示“内存类型安全”,即不能将包含一种类型的内存视为另一种类型。

根据这个定义,大多数高级语言,包括动态类型语言,都是类型安全的,因为任何不正确使用类型的尝试都会在它们中导致错误(编译时或运行时)。

因此,类型安全主要是低级语言的一个问题,尤其是 C 和 C++。这些问题通常涉及指针或强制转换(例如 C++ 中的 reinterpret_cast)。

C# 是一个介于两组之间的有趣案例:默认情况下它是类型安全的,但您可以使用 unsafe 关键字(通常是为了性能或互操作原因)。


但如果将类型安全与静态类型结合起来,并不一定意味着必须编写类型。许多静态类型安全语言,尤其是函数式语言或受其启发的语言,使用 type inference .这意味着编译器可以根据分配给它的内容自行确定变量的类型,因此您不必键入它。例如,C++ 中的 auto 关键字和 C# 中的 var

关于php - 类型安全的语言是否需要静态类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28043062/

相关文章:

javascript - 从一段文本中找出javascript中的关键字

c# - 空合并运算符是否有 "opposite"? (……用任何语言?)

c# - 如何以通用方式耦合两个类?

http - 我怎么知道在我的 Haskell 程序中哪里可以抛出异常?

PHP fatal error : Call to undefined function mysqli_stmt_get_result()

php - 将 xml 传递给 php 函数

php - 语法帮助! PHP 和 MYSQL

ruby - 在 ruby​​ 中实现 iota

javascript - 除了 First Class Functions 和 Lexical Scoping,JavaScript 与 Scheme 实现有什么共同之处?

c - 在函数调用期间避免 sizeof 样板的宏函数