- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在自定义函数中尝试使用 PHP 的 mixed
类型,但这个错误让我很困惑(标点符号是我的):
TypeError: Argument 1 passed to <functionName>() must be an instance of
mixed
,string
given.
下面的一些(示例)代码会导致错误消息并说明我希望实现的目标。下面是一些 TLDR 和进一步的解释。但基本上,我将 mixed
视为某些 PHP 原生函数(例如 is_string 函数)的参数类型,并希望在自定义函数中执行相同的操作。
如何显式指定函数参数是多类型/混合/任意?
<?php
function echoMixed(mixed $input) {
if (!is_array($input)) {
echo mixed;
} else {
// For arrays echo each element using recursive call.
foreach($input as $current) {
echoMixed($current);
}
}
}
echoMixed('test'); // <-- This results in the error.
echoMixed(['test1', 'test2']);
?>
我是 PHP 的新手,但正在尝试“新的”显式类型系统。我使用的是 PHP 7.x,但我认为这是在 PHP 5.0 中引入的。我喜欢 TypeScript 语言的可选类型系统,最初假设 mixed
的工作方式与类型 any
相同。在 typescript 中。 PHP documentation on mixed只是加强了这个假设,因为它指出:
mixed indicates that a parameter may accept multiple (but not necessarily all) types.
但在收到此错误后,似乎 mixed
是完全不同的东西。这是针对具有混合类型或其他值的数组吗?
最佳答案
要实现您想要的效果,您只需省略 mixed
并且不指定类型提示。 PHP NOT 没有语言关键字来明确指定参数可以是不同的类型。
请注意,mixed
在文档中被命名为关键字,但它不是“语言关键字”,而是仅在 PHPDocs 中的关键字。 array|object
、number
、void
和其他伪类型也是如此。您可以在代码中使用的实际类型在 PHP 中被命名为 primitives
,请参阅以下文档摘录。
以下是允许的类型和使用它们的最低 PHP 版本:
Class/interface name - PHP 5.0.0
self - PHP 5.0.0
array - PHP 5.1.0
callable - PHP 5.4.0
bool - PHP 7.0.0
float - PHP 7.0.0
int - PHP 7.0.0
string - PHP 7.0.0
mixed - PHP 8.0.0
static - PHP 8.0.0 (for return type only)
PHP 8.0 还引入了具有以下语法的联合类型:bool|string
这将允许 bool 值或字符串。 ( rfc )
警告:integer
和boolean
不能用作类型提示
来源:http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration
PHP 原始类型
string A piece of text of an unspecified length.
int or integer A whole number that may be either positive or negative.
float A real, or decimal, number that may be either positive or negative.
bool or boolean A variable that can only contain the state ‘true’ or ‘false’.
array A collection of variables of unknown type. It is possible to specify the types of array members, see the chapter on arrays for moreinformation.
resource A file handler or other system resource as described in the PHP manual.
null The value contained, or returned, is literally null. This type is not to be confused with void, which is the total absence of avariable or value (usually used with the @return tag).
callable A function or method that can be passed by a variable, see the PHP manual for more information on callables.
关键字(非 PHP 原生)
mixed A value with this type can be literally anything; the author of the documentation is unable to predict which type it will be.
void This is not the value that you are looking for. The tag associated with this type does not intentionally return anything.Anything returned by the associated element is incidental and not tobe relied on.
object An object of any class is returned,
false or true An explicit boolean value is returned; usually used when a method returns ‘false’ or something of consequence.
self An object of the class where this type was used, if inherited it will still represent the class where it was originally defined.
static An object of the class where this value was consumed, if inherited it will represent the child class. (see late static bindingin the PHP manual).
$this This exact object instance, usually used to denote a fluent interface.
来源: https://www.phpdoc.org/docs/latest/guides/types.html#primitives
2021 年更新
关于PHP 混合类型 vs Typescript any,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41267772/
我正在尝试编写一个相当多态的库。我遇到了一种更容易表现出来却很难说出来的情况。它看起来有点像这样: {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE
谁能解释一下这个表达式是如何工作的? type = type || 'any'; 这是否意味着如果类型未定义则使用“任意”? 最佳答案 如果 type 为“falsy”(即 false,或 undef
我有一个界面,在IAnimal.fs中, namespace Kingdom type IAnimal = abstract member Eat : Food -> unit 以及另一个成功
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
在 C# 中,default(Nullable) 之间有区别吗? (或 default(long?) )和 default(long) ? Long只是一个例子,它可以是任何其他struct类型。 最
假设我有一个案例类: case class Foo(num: Int, str: String, bool: Boolean) 现在我还有一个简单的包装器: sealed trait Wrapper[
这个问题在这里已经有了答案: Create C# delegate type with ref parameter at runtime (1 个回答) 关闭 2 年前。 为了即时创建委托(dele
我正在尝试获取图像的 dct。一开始我遇到了错误 The function/feature is not implemented (Odd-size DCT's are not implemented
我正在尝试使用 AFNetworking 的 AFPropertyListRequestOperation,但是当我尝试下载它时,出现错误 预期的内容类型{( “应用程序/x-plist” )}, 得
我在下面收到错误。我知道这段代码的意思,但我不知道界面应该是什么样子: Element implicitly has an 'any' type because index expression is
我尝试将 SignalType 从 ReactiveCocoa 扩展为自定义 ErrorType,代码如下所示 enum MyError: ErrorType { // .. cases }
我无法在任何其他问题中找到答案。假设我有一个抽象父类(super class) Abstract0,它有两个子类 Concrete1 和 Concrete1。我希望能够在 Abstract0 中定义类
我想知道为什么这个索引没有用在 RANGE 类型中,而是用在 INDEX 中: 索引: CREATE INDEX myindex ON orders(order_date); 查询: EXPLAIN
我正在使用 RxJava,现在我尝试通过提供 lambda 来订阅可观察对象: observableProvider.stringForKey(CURRENT_DELETED_ID) .sub
我已经尝试了几乎所有解决问题的方法,其中包括。为 提供类型使用app.use(express.static('public'))还有更多,但我似乎无法为此找到解决方案。 index.js : imp
以下哪个 CSS 选择器更快? input[type="submit"] { /* styles */ } 或 [type="submit"] { /* styles */ } 只是好
我不知道这个设置有什么问题,我在 IDEA 中获得了所有注释(@Controller、@Repository、@Service),它在行号左侧显示 bean,然后转到该 bean。 这是错误: 14-
我听从了建议 registering java function as a callback in C function并且可以使用“简单”类型(例如整数和字符串)进行回调,例如: jstring j
有一些 java 类,加载到 Oracle 数据库(版本 11g)和 pl/sql 函数包装器: create or replace function getDataFromJava( in_uLis
我已经从 David Walsh 的 css 动画回调中获取代码并将其修改为 TypeScript。但是,我收到一个错误,我不知道为什么: interface IBrowserPrefix { [
我是一名优秀的程序员,十分优秀!