drupal_static () menggunakan variabel FUNCTION, apa artinya?

21
function drupal_set_page_content($content = NULL) {
     $content_block = &drupal_static(__FUNCTION__, NULL);
     $main_content_display = &drupal_static('system_main_content_added', FALSE);

 if (!empty($content)) {
   $content_block = (is_array($content) ? $content : array('main' => array('#markup' => $content)));
 }
 else {
   $main_content_display = TRUE;
   return $content_block;
  }
}

Cuplikan ini disisipkan dari common.inc. Kami melewati a __FUNCTION__to drupal_static()tetapi saya tidak tahu apa artinya variabel ini. Apakah ini berarti cache untuk fungsi luar itu sendiri? Bagaimana cara kerjanya? Saya tidak melihat data apa pun yang ditangani di dalam fungsi sebelum dikembalikan $content_block.

Drupal cai
sumber

Jawaban:

34

__FUNCTION__adalah salah satu yang disebut Magic Constants of PHP.

Yang dilakukan adalah mengembalikan string dengan nama fungsi yang terkandung di dalamnya.

Sebagai contoh:

function my_strangely_named_function() {
  print __FUNCTION__;
}

Di atas akan mencetak 'my_strangely_named_function'.

Drupal menggunakan konstanta ini dengan cache statisnya sehingga setiap cache dapat diidentifikasi dari fungsi lain, dan dengan demikian dapat diidentifikasi secara jelas.

Untuk menggunakan versi singkat kode Anda:

function drupal_set_page_content($content = NULL) {
  $content_block = &drupal_static(__FUNCTION__, NULL);
}

Fungsi lain dalam siklus hidup Drupal dapat memanggil:

drupal_static_reset('drupal_set_page_content');

Dan itu akan menghapus cache untuk fungsi spesifik itu, sehingga lain kali itu disebut data yang dibangun seolah-olah dari yang baru.

Itu hanya penggunaan dasar dari pola cache statis, Anda dapat menemukan lebih banyak informasi dan contoh pada halaman dokumentasi untukdrupal_static() dirinya sendiri.

Clive
sumber
Terima kasih atas jawaban Anda, saya sekarang mengerti apa arti FUNCTION ini, tetapi lebih jauh lagi, di mana variabel $ content_block ini pertama kali dibuat, karena yang bisa saya temukan dalam kode ini adalah ia mengambil data dari cache, tetapi di mana cache dibuat di tempat pertama, terima kasih!
Drupal cai
1
Apakah Anda terbiasa dengan variabel statis di PHP secara umum?
Clive
1
ke komentar pertama, dan menambahkan komentar kedua, 'cache' dibuat di cabang BENAR dari ifpernyataan
Jimajamma
1
Apa yang dikatakan @Jimajamma, ditambah fakta yang drupal_statictetap menyimpan registri cache untuk semua fungsi dalam sistem yang menggunakannya.
Clive
1
Ini mungkin showcase dari ketidaktahuan PHP saya, tetapi - lagi pula: mengapa mereka mengatakan dalam referensi entitas:, drupal_staticbukan &drupal_static?
Artur
3

Informasi mendalam Anda akan dapatkan di http://blogs.sourceallies.com/2012/02/static-caching-in-drupal/ . Berikut adalah kutipan darinya:

... caching (dalam bentuk apa pun, bukan hanya caching statis) harus dilakukan dengan cara yang bertanggung jawab. Penggunaan caching memory banjir yang berlebihan yang dapat merusak situs web dengan lalu lintas tinggi. Ingat juga bahwa caching harus digunakan untuk struktur data besar yang mahal untuk dihasilkan. Terakhir, gunakan caching hanya jika Anda tahu pasti bahwa apa yang Anda cache akan diperlukan lagi (misalnya, data menu di Drupal). Tidak ada gunanya menyimpan daftar nama atau alamat atau warna jika daftar itu tidak akan pernah digunakan lagi. Itu akan seperti menghemat ban mobil lama Anda setelah Anda memakai yang baru.

Suresh Kumara
sumber