Úvodní stránka › Fórum podpory WordPressu › Problémy s WordPressem › Plugin ve třídě
Štítky: Dědičnost, Konstruktor, OOP, php, Třída
Zvolené téma obsahuje celkem 5 odpovědí. Do diskuze (3 účastníci) se naposledy zapojil uživatel sjiamnocna a poslední změna je stará 12 let.
-
AutorPříspěvky
-
11. června 2014 (18:43) #19057
Zdravím, mám problém se zprovozněním pluginu se třídou. Vše funguje dobře, jen když chci spustit plugin, musím volat vytvoření nové třídy (new PluginClass;), protože mi to bez toho nefunguje.
Otázka zní: Je to tak normální, nebo jsem někde udělal něco špatně?
class sidebarposts_plugin{ public function sidebarposts_plugin(){ } } //enqueue scripts and styles with class class enqueue extends sidebarposts_plugin{ public function enqueue(){ add_action('init',array($this,'initialize')); add_action('wp_enqueue_scripts',array($this,'enq_public')); } public function initialize(){ wp_register_script('shposts',plugins_url().'/sidebar-posts/js/jq_shposts.js',array('jquery')); wp_register_style('shstyle',plugins_url().'/sidebar-posts/css/sbposts-style.css'); } public function enq_public(){ wp_enqueue_script('shposts'); wp_enqueue_style('shstyle'); } public function enq_admin(){ } } new sidebarposts_plugin(); new enqueue();a druhá věc: Při přidávání podtřídy se automaticky spustí konstruktor, nebo jej musím pouštět manuálně z předchozí třídy?
Díky :)
12. června 2014 (7:24) #190591. Je to tak normální, musíš vytvořit nějaký objekt, pokud s ním chceš pracovat.
2. Pokud vytváříš třídu, která je extended pro jinou třídu, tak to není podtřída, ale třída, která rozšiřuje třídu rodičovskou (snad jsem to nevyjádřil neohrabaně). Jednoduše, ty nová třída má přístup k metodám rodičovské třídy, ale má i vlastní. Takže tím, že vytvoříš objekt nové třídy, máš přístup i k rodičovské třídě. Názvosloví je trochu jiné, ale takto to myslím na začátek jednoduše popisuje, jak to funguje.12. června 2014 (14:22) #19066Nevím, zda jsem v tomto směru natvrdlý, nebo co, ale co to pro mně znamená?
znamená to, že pokud chci spustit konstruktor rodiče, musím vytvořit objekt, ale kostrukce dítěte se nespustí, a že musím také znovu tvořit objekt?Pokud vím, když jsem tvořil Widget pomocí extends, nic tam nebylo…
12. června 2014 (15:36) #19069Constructor rodiče se spustí automaticky, při volání child třídy. Takže stačí New OdvozenaTridaOdZakladniTridy()
13. června 2014 (12:04) #19072Musilda: Díky!
Zájemcům bych doporučil velmi povedený seriál o objektovém programování pro WordPress. A samozřejmě jako příklad vzít WordPress Plugin Boilerplate, kde se toho opravdu hodně naučíte :-)
class sidebarposts_plugin{Zde je pouze deklarace třídy, která sama o sobě nic nedělá.
new sidebarposts_plugin();Teprve zde vytvoříte instanci deklarované třídy, tedy vlastně objekt, se kterým lze dále pracovat.
Dále zmiňované rozšiřování tříd (
extends) je vlastně definice jejich dědičnosti (inheritance). A u konstruktorů je třeba si dát pozor, pokud ho chcete předávat z rodičovské třídy (aneb použít dvojitou dvojtečku):parent::__construct();Vcelku dobře je to vysvětleno zde (česky).
Ale v uvedeném příkladě by mělo stačit uvést
new enqueue();anew sidebarposts_plugin();už je tam zbytečné.18. června 2014 (16:59) #19174Děkuji za info, mrknu na to :)
-
AutorPříspěvky
Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.