Function_exists ise neden kullanılır?


30

Çok sayıda WordPress teması geliştiricisinin bunu işlevlerde kullanacağını fark ettim.

if (function_exists('register_nav_menus')) {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

Benim için, ben de kullanıyorum her fonksiyon için kullanımı ADD_ACTION ALWAYSE functions.php

Yani, yukarıdaki gibi yazılır:

add_action('init', 'my_register_nav_menus');

function my_register_nav_menus() {
    register_nav_menus (array('primary' => 'Header Navigation'));
}

İki sorum var:

  1. Neden if yöntemini ilk yöntemde kullanmalısınız?

  2. Hangisi doğru yolu?

Yanıtlar:


35

Görmeden önce yerleşik WordPress işlevlerinin olup olmadığını kontrol etmek IMHO'nun gerekmediği geriye dönük uyumluluk içindir.

Öyleyse if ( function_exists( 'register_nav_menus' ) )tema yazarının 3.0'dan önceki sürümleri desteklediğini görüyorsanız .

Hala bazen if ( function_exists( 'dynamic_sidebar' ) )Neden? Size söyleyemedim çünkü dynamic_sidebar 2.2'de tanıtıldı.

Bunu kullanmak için başka bir neden, temanızı veya eklentinizi takılabilir hale getirmektir. Takılabilir bir işlev, bir çocuk temasında veya başka bir eklentide geçersiz kılınabilen işlevdir.

Bu, aramada değil tanımda yapılır ve siz kullanın! Tanımlamadan önce var olmadığından emin olmak için

if ( ! function_exists( 'my_awesome_function' ) ) {
/**
 * My Awesome function is awesome
 *
 * @param array $args
 * @return array
 */
function my_awesome_function( $args ) {
  //function stuff
  return array();
  }
}

Bu yapıldığında, bir çocuk teması veya başka bir eklenti, bu fonksiyonu kendi sahipleriyle geçersiz kılabilir.


9

function_existsFonksiyonu gibi işlev yüklemek için bir başka yol değildir add_actiononun o kodunuzu kırmayacak böylece aynı adla başka hiçbir işlevi olmadığını görmek için kodunuzu kontrol için. Php.net'ten:

Fonksiyon_adı için hem dahili (dahili) hem de kullanıcı tanımlı tanımlanmış fonksiyonların listesini kontrol eder.

Kodunuzda iki kez aynı işlevi varsa önüne neden thats kıracak Kişisel wp_ daha başka bir şeyle fonksiyonunu.

Daha fazla bilgi için: http://php.net/manual/tr/function.function-exists.php


0

http://php.net/function_exists adresini kullanabilirsiniz.

if(function_exists('my_function')){
   // my_function is defined
}

VEYA kullanılabilir tüm işlevi görmek istiyorsanız, aynı zamanda hepsini yazdırırsanız,

echo "<pre>"; print_r(get_defined_functions());

sayfada yazdırdığınızda, listede bulunmazsa bu fonksiyonu kullanabilirsiniz; kullanılamaz.

belirli bir kütüphane için uzantıyı etkinleştirmeniz gerekebilir.


0

php.net bunu şöyle tanımlar.

(PHP 4, PHP 5, PHP 7) function_exists - Verilen işlev tanımlanmışsa TRUE döndürür

Michelle'i, kullanımda [cast] tipini yalnızca cast tipine benzer bir şey için kullanmanız gerektiğine katılıyorum; Bir fonksiyonun var olup olmadığını (o sayfada veya o sayfada / dosya referansında çağrılan herhangi bir şeyde) arayacağınızı ve böylece başka bir işlevi çalıştırmanın güvenli olup olmadığını veya bazı şablon HTML kodlarını ayrıştırmanın güvenli olduğunu bilirsiniz.

Birinin belirttiği gibi, dosya / temanızın (WordPress kullanarak) ihtiyaç duyduğunuz talebi yerine getirip getiremediğini kontrol etmek için sıkça kullanılır. Bir temanın belirli bir şablon parçası olup olmadığını kontrol etmek için kullandım.

if ( function_exists( 'register_sidebar' ) ) { get_sidebar(); }


0

function_exists İşlev isminden sonra bir tema içerisinde kullanılmamalıdır.

add_action( 'loop_start', 'add_slider' );

function add_slider() {

if ( function_exists( 'soliloquy' ) ) { 

soliloquy( 'slider', 'slug' ); 

    }

}

Bu, bir fonksiyon ve / veya işaretlemeden önce eklentinin aktif olduğundan emin olmak için kontrol eder, aksi halde tanımsız fonksiyona çağrı gibi bir hata alabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.