En programmation PHP, obtenir un type de réflexion basé sur un type primitif est une compétence importante. Reflect.Kind est une propriété de la bibliothèque de classes de réflexion fournie par PHP, qui peut être utilisée pour déterminer le type de données d'une variable. En utilisant Reflect.Kind, nous pouvons facilement obtenir le type de la variable et effectuer les opérations et traitements correspondants. Pour les développeurs PHP, maîtriser cette compétence permettra de mieux comprendre et utiliser le mécanisme de réflexion, et d'améliorer la lisibilité et la flexibilité du code. Dans cet article, l'éditeur PHP Baicao présentera en détail comment obtenir Reflect.Kind basé sur des types primitifs, et partagera quelques exemples pratiques et techniques pour aider les lecteurs à mieux maîtriser ce point de connaissance.
Je souhaite utiliser Reflect.kind comme Reflect.interface pour un type qui implémente une interface, mais dont l'implémentation est basée sur un type primitif : type id string
Une autre réponse à cette question pourrait être de savoir comment obtenir le reflet.type de n'importe quel type qui renvoie reflet.interfaces lors de l'appel de kind().
Voici l’exemple complet du terrain de jeu en déplacement :
type ID interface { myid() } type id string func (id) myid() {} func main() { id := ID(id("test")) fmt.Println(id) fmt.Println(reflect.TypeOf(id)) // How to get the kind to return "reflect.Interface" from the var "id"? fmt.Println(reflect.TypeOf(id).Kind()) }
reflect.typeof()
(和 reflect.valueof()
) 需要一个 接口{}
。基本上,无论您传递给 reflect.typeof()
的值是什么,如果它还不是接口值,它将隐式包装在 interface{}
中。如果传递的值已经是接口值,则其中存储的具体值将作为 interface{}
Transmettez.
Pour éviter ce "repacking", qui est l'un des rares cas où un pointeur vers une interface a du sens, en fait vous ne pouvez pas l'éviter ici. Vous devez passer un pointeur vers la valeur de l'interface.
Donc si vous passez un pointeur vers une interface, le pointeur sera enveloppé dans interface{}
值中。您可以使用 type.elem()
pour obtenir le descripteur de type du "point-to-type": c'est à dire le type d'élément du type pointeur, qui sera le descripteur de type du type d'interface que vous recherchez. p>
Exemple :
id := id(id("test")) fmt.println(id) t := reflect.typeof(&id).elem() fmt.println(t) fmt.println(t.kind())
Quelles sorties (essayez-le sur le go Playground) :
test main.ID interface
Afficher les questions connexes : Quelle est la différence entre reflect.valueof() et value.elem() in go ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!