Entah bagaimana saya menemukan proyek di WordPress (WP), di mana saya perlu membuat tema khusus. Di WP, templatnya asli, yang bagus - Anda tidak perlu mempelajari bahasa tambahan. Tapi saya benar-benar ingin mewarisi template seperti di Twig , dan PHP tidak bisa melakukannya di luar kotak.
Itu tetap untuk menyelesaikan masalah warisan. Setelah mempelajari masalahnya, diputuskan untuk terinspirasi oleh pustaka phpti , di mana ada beberapa poin yang benar-benar ingin saya perbaiki:
Penulis perpustakaan menulis βSetiap Blok Selalu Dieksekusi!β Dalam huruf kapital, semua blok dieksekusi, bahkan jika mereka diganti, dan tidak akan pernah menjadi keluaran.
- , , , - .
- .
ob_start
.
phpti startblock/endblock
import
:
<!-- -->
<?php startblock('blockName') ?>
<!-- -->
<?php endblock() ?>
<!-- -->
index.php
<?php include 'layout.php' ?> <!-- -->
<?php startblock('blockName') ?>
<!-- -->
<?php endblock() ?>
:
start/end . , .
. , , . . ?
, : , , .
, :
layout.php
//
<!-- -->
<?php slot('blockName', function(){ ?>
<!-- -->
<?php }) ?>
<!-- -->
index.php
<?php block('blockName', function(){ ?>
<!-- -->
<?php }) ?>
<?php include 'layout.php' ?> <!-- -->
slot
block
, , , .
. , .
root.php
- , :
<!DOCTYPE html>
<html>
<head>
<title>
<!-- '' - -->
<?php slot('title') ?>
</title>
</head>
<body>
<div id="root">
<!-- , -->
<?php slot('body', function () { ?>
<p>'body' :: root.php</p>
<?php }) ?>
</div>
</body>
</html>
two-columns.php
- :
<?php
block('title', function () { ?> <!-- '' - -->
Title :: two-columns.php
<?php });
block('body', function () { ?>
<div id="two-columnts">
<div id="main">
<?php slot('main', function () { ?> <!-- -->
<p>'main' :: two-columns.php</p>
<?php }) ?>
</div>
<div id="side">
<?php slot('side', function () { ?>
<p>'side' :: two-columns.php</p>
<?php }) ?>
</div>
</div>
<div id="footer">
<?php slot('footer', function () { ?>
<p>'footer' :: two-columns.php</p>
<?php }) ?>
</div>
<?php });
include './root.php'; // root.php
index.php
- , :
<?php
require_once '../src/InheritTpl.php';
block('title', function () { ?> 'title' :: index.php <?php });
block('side', function () { ?>
<p>'side' :: index.php</p>
<?php });
block('main', function () { ?>
<div id="main-index"> <!-- -->
<?php super() ?> <!-- -->
</div>
<?php });
// , ?
block('main', function () { ?>
<div id="main-index"> <!-- -->
<?php super() ?>
</div>
<?php });
// 'footer'
include './two-columns.php';
( ):
<!DOCTYPE html>
<html>
<head>
<title> 'title' :: index.php </title>
</head>
<body>
<div id="root">
<div id="two-columnts">
<div id="main">
<div id="main-index"> <!-- -->
<div id="main-index"> <!-- -->
<p>'main' :: two-columns.php</p>
</div>
</div>
</div>
<div id="side">
<p>'side' :: index.php</p>
</div>
</div>
<div id="footer">
<p>'footer' :: two-columns.php</p>
</div>
</div>
</body>
</html>
. , ?
Mari tulis ulang contoh di atas untuk pustaka phpti. Mari kita beri dia sedikit permulaan, karena tidak ada blok kelas berat yang diganti dalam contoh ini.
Kami akan membandingkan waktu 10.000 render pada PHP 8.0.2 dan prosesor 3.6GHz.
phpti: 0.831 detik
subjek: 0,353 detik
Sebagai kesimpulan, kami dapat mengatakan bahwa ukuran perpustakaan telah dikurangi 10 kali lipat, sedangkan kecepatan mekanisme pewarisan telah meningkat setidaknya 2 kali lipat.
Anda dapat melihat kode sumbernya di sini .