{"id":86,"date":"2024-12-24T02:06:38","date_gmt":"2024-12-24T01:06:38","guid":{"rendered":"https:\/\/josefnemec.cz\/blog\/?p=86"},"modified":"2025-01-01T01:01:34","modified_gmt":"2025-01-01T00:01:34","slug":"proceduralni-vs-objektove-orientovany-pristup-v-php-srovnani-a-priklady","status":"publish","type":"post","link":"https:\/\/josefnemec.cz\/blog\/php\/proceduralni-vs-objektove-orientovany-pristup-v-php-srovnani-a-priklady\/","title":{"rendered":"Procedur\u00e1ln\u00ed vs. Objektov\u011b orientovan\u00fd p\u0159\u00edstup v PHP: Srovn\u00e1n\u00ed a P\u0159\u00edklady"},"content":{"rendered":"\n<p>PHP je jazyk, kter\u00fd podporuje jak procedur\u00e1ln\u00ed, tak objektov\u011b orientovan\u00fd p\u0159\u00edstup (OOP). Ka\u017ed\u00fd z t\u011bchto p\u0159\u00edstup\u016f m\u00e1 sv\u00e9 v\u00fdhody a nev\u00fdhody a je vhodn\u00fd pro r\u016fzn\u00e9 typy projekt\u016f. Tento \u010dl\u00e1nek porovn\u00e1 oba p\u0159\u00edstupy a uk\u00e1\u017ee, jak se li\u0161\u00ed na praktick\u00fdch p\u0159\u00edkladech, v\u010detn\u011b aplikace v r\u016fzn\u00fdch framework\u00e1ch, jako je Nette.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Procedur\u00e1ln\u00ed p\u0159\u00edstup<\/h2>\n\n\n\n<p>Procedur\u00e1ln\u00ed programov\u00e1n\u00ed je tradi\u010dn\u00ed zp\u016fsob psan\u00ed k\u00f3du, kde jsou programy strukturov\u00e1ny kolem funkc\u00ed a vol\u00e1n\u00ed procedur.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vlastnosti procedur\u00e1ln\u00edho p\u0159\u00edstupu<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Jednoduchost:<\/strong> K\u00f3d je \u010dtiv\u00fd a snadno pochopiteln\u00fd.<\/li>\n\n\n\n<li><strong>P\u0159\u00edm\u00e1 logika:<\/strong> Programov\u00e1n\u00ed krok za krokem.<\/li>\n\n\n\n<li><strong>Vhodn\u00e9 pro men\u0161\u00ed projekty:<\/strong> Ide\u00e1ln\u00ed pro jednoduch\u00e9 aplikace a skripty.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">P\u0159\u00edklad procedur\u00e1ln\u00edho k\u00f3du<\/h3>\n\n\n\n<p>P\u0159edstavme si jednoduch\u00fd p\u0159\u00edklad kalkula\u010dky:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nfunction add($a, $b) {\n    return $a + $b;\n}\n\nfunction subtract($a, $b) {\n    return $a - $b;\n}\n\n$result = add(10, 5);\necho \"Sou\u010det: $result\\n\";\n\n$result = subtract(10, 5);\necho \"Rozd\u00edl: $result\\n\";\n<\/code><\/pre>\n\n\n\n<p>Tento p\u0159\u00edstup je jednoduch\u00fd a intuitivn\u00ed, ale s rostouc\u00ed slo\u017eitost\u00ed projektu m\u016f\u017ee b\u00fdt obt\u00ed\u017en\u011b spravovateln\u00fd.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Objektov\u011b orientovan\u00fd p\u0159\u00edstup (OOP)<\/h2>\n\n\n\n<p>OOP strukturuje k\u00f3d kolem objekt\u016f, kter\u00e9 obsahuj\u00ed data (vlastnosti) a funkce (metody). Tento p\u0159\u00edstup podporuje op\u011btovn\u00e9 vyu\u017eit\u00ed k\u00f3du a lep\u0161\u00ed organizaci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vlastnosti OOP<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Modularita:<\/strong> K\u00f3d je roz\u010dlen\u011bn do t\u0159\u00edd a objekt\u016f.<\/li>\n\n\n\n<li><strong>Op\u011btovn\u00e9 pou\u017eit\u00ed:<\/strong> Objekty lze snadno op\u011btovn\u011b pou\u017eit v r\u016fzn\u00fdch \u010d\u00e1stech programu.<\/li>\n\n\n\n<li><strong>Lep\u0161\u00ed udr\u017eovatelnost:<\/strong> Jasn\u00e1 struktura a odd\u011blen\u00ed zodpov\u011bdnosti.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">P\u0159\u00edklad OOP k\u00f3du<\/h3>\n\n\n\n<p>Uka\u017eme si stejn\u00fd p\u0159\u00edklad kalkula\u010dky v OOP:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nclass Calculator {\n    public function add($a, $b) {\n        return $a + $b;\n    }\n\n    public function subtract($a, $b) {\n        return $a - $b;\n    }\n}\n\n$calculator = new Calculator();\n\n$result = $calculator-&gt;add(10, 5);\necho \"Sou\u010det: $result\\n\";\n\n$result = $calculator-&gt;subtract(10, 5);\necho \"Rozd\u00edl: $result\\n\";\n<\/code><\/pre>\n\n\n\n<p>V\u00fdkon a organizace jsou v\u00fdrazn\u011b lep\u0161\u00ed, co\u017e usnad\u0148uje pr\u00e1ci na v\u011bt\u0161\u00edch projektech.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">P\u0159\u00edklad pou\u017eit\u00ed: Nette Framework<\/h2>\n\n\n\n<p><strong><a href=\"https:\/\/josefnemec.cz\/blog\/php\/co-je-nette\/\" data-type=\"post\" data-id=\"56\">Nette<\/a><\/strong> je typick\u00fd p\u0159\u00edklad frameworku, kter\u00fd podporuje objektov\u011b orientovan\u00fd p\u0159\u00edstup. Struktura aplikace v <a href=\"https:\/\/josefnemec.cz\/blog\/technologie\/co-je-nette-a-proc-byste-ho-meli-pouzivat\/\" data-type=\"post\" data-id=\"96\">Nette<\/a> je zalo\u017eena na t\u0159\u00edd\u00e1ch, kter\u00e9 reprezentuj\u00ed kontrolery, modely a komponenty.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">P\u0159\u00edklad OOP v Nette<\/h3>\n\n\n\n<p>P\u0159edstavme si jednoduch\u00fd formul\u00e1\u0159 pro p\u0159id\u00e1n\u00ed u\u017eivatele:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nclass UserPresenter extends Nette\\Application\\UI\\Presenter {\n    public function createComponentUserForm() {\n        $form = new Nette\\Application\\UI\\Form();\n        $form-&gt;addText('name', 'Jm\u00e9no:')\n             -&gt;setRequired('Zadejte jm\u00e9no.');\n\n        $form-&gt;addSubmit('send', 'Odeslat');\n        $form-&gt;onSuccess&#91;] = &#91;$this, 'userFormSucceeded'];\n\n        return $form;\n    }\n\n    public function userFormSucceeded($form, $values) {\n        \/\/ Logika p\u0159i odesl\u00e1n\u00ed formul\u00e1\u0159e\n        $this-&gt;flashMessage('U\u017eivatel p\u0159id\u00e1n.', 'success');\n        $this-&gt;redirect('Homepage:default');\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>Tento p\u0159\u00edstup je strukturovan\u00fd a podporuje op\u011btovn\u00e9 pou\u017eit\u00ed komponent.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">P\u0159\u00edklad pou\u017eit\u00ed: Procedur\u00e1ln\u00ed p\u0159\u00edstup v jednodu\u0161\u0161\u00edch projektech<\/h2>\n\n\n\n<p>Procedur\u00e1ln\u00ed p\u0159\u00edstup lze pou\u017e\u00edt nap\u0159\u00edklad v men\u0161\u00edch skriptech nebo jednodu\u0161\u0161\u00edch aplikac\u00edch. P\u0159\u00edkladem je jednoduch\u00e1 aplikace pro zpracov\u00e1n\u00ed formul\u00e1\u0159e:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nif ($_SERVER&#91;'REQUEST_METHOD'] === 'POST') {\n    $name = $_POST&#91;'name'] ?? '';\n    if ($name === '') {\n        echo \"Zadejte jm\u00e9no.\";\n    } else {\n        echo \"U\u017eivatel $name byl p\u0159id\u00e1n.\";\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>I kdy\u017e je tento p\u0159\u00edstup jednodu\u0161\u0161\u00ed, rychle nar\u00e1\u017e\u00ed na limity u slo\u017eit\u011bj\u0161\u00edch aplikac\u00ed.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Srovn\u00e1n\u00ed<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Aspekt<\/strong><\/th><th><strong>Procedur\u00e1ln\u00ed p\u0159\u00edstup<\/strong><\/th><th><strong>OOP<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>Jednoduchost<\/strong><\/td><td>Jednoduch\u00fd na nau\u010den\u00ed a pou\u017eit\u00ed<\/td><td>Vy\u017eaduje znalost t\u0159\u00edd a objekt\u016f<\/td><\/tr><tr><td><strong>Modularita<\/strong><\/td><td>Omezen\u00e1<\/td><td>Vysok\u00e1<\/td><\/tr><tr><td><strong>Udr\u017eovatelnost<\/strong><\/td><td>Obt\u00ed\u017en\u011bj\u0161\u00ed<\/td><td>Snadn\u00e1<\/td><\/tr><tr><td><strong>Vhodnost<\/strong><\/td><td>Men\u0161\u00ed projekty<\/td><td>St\u0159edn\u00ed a velk\u00e9 projekty<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Z\u00e1v\u011br<\/h2>\n\n\n\n<p>Procedur\u00e1ln\u00ed p\u0159\u00edstup je vhodn\u00fd pro jednodu\u0161\u0161\u00ed aplikace a skripty, zat\u00edmco OOP je ide\u00e1ln\u00ed pro slo\u017eit\u011bj\u0161\u00ed projekty, kde je d\u016fle\u017eit\u00e1 modularita a udr\u017eovatelnost. <a href=\"https:\/\/josefnemec.cz\/blog\/php\/srovnani-php-frameworku\/\" data-type=\"post\" data-id=\"83\">Frameworky<\/a> jako <strong>Nette<\/strong> d\u016fkazn\u011b ukazuj\u00ed v\u00fdhody OOP p\u0159\u00edstupu, zat\u00edmco procedur\u00e1ln\u00ed p\u0159\u00edstup najde sv\u00e9 vyu\u017eit\u00ed v jednodu\u0161\u0161\u00edch kontextech. Spr\u00e1vn\u00fd v\u00fdb\u011br z\u00e1vis\u00ed na konkr\u00e9tn\u00edch pot\u0159eb\u00e1ch projektu.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP je jazyk, kter\u00fd podporuje jak procedur\u00e1ln\u00ed, tak objektov\u011b orientovan\u00fd p\u0159\u00edstup (OOP). Ka\u017ed\u00fd z t\u011bchto p\u0159\u00edstup\u016f m\u00e1 sv\u00e9 v\u00fdhody a nev\u00fdhody a je vhodn\u00fd pro r\u016fzn\u00e9 typy projekt\u016f. Tento \u010dl\u00e1nek porovn\u00e1 oba p\u0159\u00edstupy a uk\u00e1\u017ee, jak se li\u0161\u00ed na praktick\u00fdch<\/p>\n","protected":false},"author":1,"featured_media":12,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[27,58,28,4],"tags":[62,69,47,70],"class_list":["post-86","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-framework","category-management","category-nette","category-php","tag-nette","tag-oop","tag-php","tag-procedural"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/josefnemec.cz\/blog\/wp-content\/uploads\/2024\/12\/DALL%C2%B7E-2024-12-17-11.33.03-A-visually-engaging-image-representing-PHP-8.4s-new-features.-The-composition-includes-a-stylized-PHP-elephant-mascot-standing-next-to-a-glowing-vers.webp?fit=1024%2C1024&ssl=1","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/posts\/86","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/comments?post=86"}],"version-history":[{"count":3,"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/posts\/86\/revisions"}],"predecessor-version":[{"id":120,"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/posts\/86\/revisions\/120"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/media\/12"}],"wp:attachment":[{"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/media?parent=86"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/categories?post=86"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/josefnemec.cz\/blog\/wp-json\/wp\/v2\/tags?post=86"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}