Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Semak tiada dan kemudian tetapkan nilai daripada struktur

Semak tiada dan kemudian tetapkan nilai daripada struktur

PHPz
PHPzke hadapan
2024-02-09 13:54:08515semak imbas

检查 nil 后从结构体中赋值

PHP editor Strawberry akan memperkenalkan kepada anda teknik pengaturcaraan biasa hari ini - "semak sifar dan kemudian tetapkan nilai daripada struktur". Semasa menulis kod, kita sering menghadapi situasi di mana kita perlu mendapatkan nilai medan tertentu daripada struktur. Walau bagaimanapun, disebabkan kemungkinan nilai sifar, mengambil nilai secara langsung boleh menyebabkan program ranap. Untuk menyelesaikan masalah ini, kita perlu melakukan semakan sifar sebelum mengambil nilai untuk memastikan kestabilan program. Artikel ini akan memperkenalkan pelaksanaan khusus teknik ini secara terperinci untuk membantu pembaca lebih memahami dan mengaplikasikannya dalam pembangunan sebenar.

Kandungan soalan

Saya mempunyai struktur, yang mengandungi unsur-unsur seperti struktur.

Andaikan pengedaran saya adalah seperti berikut:

validfrom := dkdm.authenticatedpublic.requiredextensions.kdmrequiredextensions.contentkeysnotvalidbefore Data ini dinamik dan mana-mana elemen pada bila-bila masa mungkin sifar disebabkan oleh ralat penghuraian atau tiada data.

Sebagai contoh, kdmrequiredextensions 可以为 nil,当我尝试访问 contentkeysnotvalidbefore ia akan membuang ralat rujukan penunjuk sifar.

Adakah mungkin untuk mempunyai kaedah yang mengambil elemen dan menyemak rantaian nilai satu demi satu, kembali hanya jika tiada unsur tiada.

validfrom := checkandassign(dkdm.authenticatedpublic.requiredextensions.kdmrequiredextensions.contentkeysnotvalidbefore)

Saya mencuba pernyataan if sebelum tugasan, tetapi mengharapkan cara yang lebih bersih.

if dkdm.AuthenticatedPublic.RequiredExtensions != nil &&
    dkdm.AuthenticatedPublic.RequiredExtensions.KDMRequiredExtension != nil {
      validFrom = dkdm.AuthenticatedPublic.RequiredExtensions.KDMRequiredExtensions.ContentKeysNotValidBefore
}

Penyelesaian

Adakah mungkin untuk mempunyai cara yang mengambil elemen dan menyemak rantaian nilai satu demi satu dan hanya kembali jika tiada unsur yang tiada.

Tidak, tiada sintaks atau alatan seperti itu sedang digunakan.

Saya mencuba pernyataan if sebelum tugasan, tetapi mengharapkan cara yang lebih bersih.

if kenyataan adalah cara yang "bersih". Anda boleh memendekkannya dengan memperkenalkan pembolehubah baharu seperti

if re := dkdm.AuthenticatedPublic.RequiredExtensions; re != nil && 
    re.KDMRequiredExtension != nil  {
    ....
}

Atas ialah kandungan terperinci Semak tiada dan kemudian tetapkan nilai daripada struktur. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam