[{"data":1,"prerenderedAt":817},["ShallowReactive",2],{"post-\u002Fwriting-clean-modular-and-reusable-code-in-php":3},{"page":4,"translation":686,"nav":688,"related":801,"random":810},{"id":5,"title":6,"body":7,"categories":667,"category":669,"date":670,"description":671,"draft":672,"extension":673,"image":674,"kind":669,"lang":675,"meta":676,"navigation":145,"path":677,"readingTime":118,"seo":678,"slug":679,"stem":679,"tags":680,"translationKey":684,"type":668,"updated":669,"__hash__":685},"posts\u002Fwriting-clean-modular-and-reusable-code-in-php.md","Best Practices for Writing Clean, Modular, and Reusable Code in PHP",{"type":8,"value":9,"toc":653},"minimark",[10,14,52,55,60,71,76,79,86,171,178,354,356,360,371,374,376,380,383,397,403,464,466,470,550,552,556,560,571,575,578,598,602,605,607,611,639,644,649],[11,12,13],"p",{},"Writing clean, modular, and reusable code is a cornerstone of professional software engineering. In the PHP ecosystem, which has evolved from a simple scripting language to a robust, type-safe OOP language, adhering to clean coding standards is crucial for maintaining large-scale applications.",[15,16,17,24],"blockquote",{},[11,18,19,20],{},"💡 ",[21,22,23],"strong",{},"TL;DR (Quick Summary):",[25,26,27,34,40,46],"ul",{},[28,29,30,33],"li",{},[21,31,32],{},"Clean Code:"," Code that is easy to read, write, and maintain. Follows consistent style (PSR-12) and avoids duplication.",[28,35,36,39],{},[21,37,38],{},"SOLID Principles:"," Five design principles (SRP, OCP, LSP, ISP, DIP) that prevent code rot and make software flexible.",[28,41,42,45],{},[21,43,44],{},"Modularity:"," Breaking code into small, self-contained components using Dependency Injection (DI).",[28,47,48,51],{},[21,49,50],{},"Automation:"," Use tools like PHP_CodeSniffer, PHPStan, and PHPUnit to enforce standards and catch bugs early.",[53,54],"hr",{},[56,57,59],"h2",{"id":58},"_1-the-solid-principles-in-action","1. The SOLID Principles in Action",[11,61,62,63,66,67,70],{},"While the SOLID principles are widely discussed, seeing them implemented in PHP makes their benefits clear. Let's look at the two most frequently violated principles: ",[21,64,65],{},"SRP"," and ",[21,68,69],{},"DIP",".",[72,73,75],"h3",{"id":74},"single-responsibility-principle-srp","Single Responsibility Principle (SRP)",[11,77,78],{},"A class should have only one reason to change.",[11,80,81,82,85],{},"❌ ",[21,83,84],{},"Bad Practice (Violates SRP):","\nThis class handles user registration, database insertion, and sending welcome emails all in one place.",[87,88,93],"pre",{"className":89,"code":90,"language":91,"meta":92,"style":92},"language-php shiki shiki-themes github-light github-dark","class UserRegistration {\n    public function register(array $data) {\n        \u002F\u002F Validate user data\n        \u002F\u002F Connect to database and insert user record\n        $db = new PDO('mysql:host=localhost;dbname=test', 'root', '');\n        $stmt = $db->prepare(\"INSERT INTO users (username, email) VALUES (?, ?)\");\n        $stmt->execute([$data['username'], $data['email']]);\n\n        \u002F\u002F Send welcome email\n        mail($data['email'], \"Welcome!\", \"Thanks for registering.\");\n    }\n}\n","php","",[94,95,96,104,110,116,122,128,134,140,147,153,159,165],"code",{"__ignoreMap":92},[97,98,101],"span",{"class":99,"line":100},"line",1,[97,102,103],{},"class UserRegistration {\n",[97,105,107],{"class":99,"line":106},2,[97,108,109],{},"    public function register(array $data) {\n",[97,111,113],{"class":99,"line":112},3,[97,114,115],{},"        \u002F\u002F Validate user data\n",[97,117,119],{"class":99,"line":118},4,[97,120,121],{},"        \u002F\u002F Connect to database and insert user record\n",[97,123,125],{"class":99,"line":124},5,[97,126,127],{},"        $db = new PDO('mysql:host=localhost;dbname=test', 'root', '');\n",[97,129,131],{"class":99,"line":130},6,[97,132,133],{},"        $stmt = $db->prepare(\"INSERT INTO users (username, email) VALUES (?, ?)\");\n",[97,135,137],{"class":99,"line":136},7,[97,138,139],{},"        $stmt->execute([$data['username'], $data['email']]);\n",[97,141,143],{"class":99,"line":142},8,[97,144,146],{"emptyLinePlaceholder":145},true,"\n",[97,148,150],{"class":99,"line":149},9,[97,151,152],{},"        \u002F\u002F Send welcome email\n",[97,154,156],{"class":99,"line":155},10,[97,157,158],{},"        mail($data['email'], \"Welcome!\", \"Thanks for registering.\");\n",[97,160,162],{"class":99,"line":161},11,[97,163,164],{},"    }\n",[97,166,168],{"class":99,"line":167},12,[97,169,170],{},"}\n",[11,172,173,174,177],{},"✔️ ",[21,175,176],{},"Good Practice (Adheres to SRP):","\nWe split the responsibilities into a repository layer for database operations and an emailer service for communication.",[87,179,181],{"className":89,"code":180,"language":91,"meta":92,"style":92},"class UserRepository {\n    private PDO $db;\n\n    public function __construct(PDO $db) {\n        $this->db = $db;\n    }\n\n    public function save(User $user): void {\n        $stmt = $this->db->prepare(\"INSERT INTO users (username, email) VALUES (?, ?)\");\n        $stmt->execute([$user->getUsername(), $user->getEmail()]);\n    }\n}\n\nclass EmailService {\n    public function sendWelcomeEmail(string $email): void {\n        mail($email, \"Welcome!\", \"Thanks for registering.\");\n    }\n}\n\nclass UserRegistration {\n    private UserRepository $repository;\n    private EmailService $emailService;\n\n    public function __construct(UserRepository $repository, EmailService $emailService) {\n        $this->repository = $repository;\n        $this->emailService = $emailService;\n    }\n\n    public function register(User $user): void {\n        $this->repository->save($user);\n        $this->emailService->sendWelcomeEmail($user->getEmail());\n    }\n}\n",[94,182,183,188,193,197,202,207,211,215,220,225,230,234,238,243,249,255,261,266,271,276,281,287,293,298,304,310,316,321,326,332,338,344,349],{"__ignoreMap":92},[97,184,185],{"class":99,"line":100},[97,186,187],{},"class UserRepository {\n",[97,189,190],{"class":99,"line":106},[97,191,192],{},"    private PDO $db;\n",[97,194,195],{"class":99,"line":112},[97,196,146],{"emptyLinePlaceholder":145},[97,198,199],{"class":99,"line":118},[97,200,201],{},"    public function __construct(PDO $db) {\n",[97,203,204],{"class":99,"line":124},[97,205,206],{},"        $this->db = $db;\n",[97,208,209],{"class":99,"line":130},[97,210,164],{},[97,212,213],{"class":99,"line":136},[97,214,146],{"emptyLinePlaceholder":145},[97,216,217],{"class":99,"line":142},[97,218,219],{},"    public function save(User $user): void {\n",[97,221,222],{"class":99,"line":149},[97,223,224],{},"        $stmt = $this->db->prepare(\"INSERT INTO users (username, email) VALUES (?, ?)\");\n",[97,226,227],{"class":99,"line":155},[97,228,229],{},"        $stmt->execute([$user->getUsername(), $user->getEmail()]);\n",[97,231,232],{"class":99,"line":161},[97,233,164],{},[97,235,236],{"class":99,"line":167},[97,237,170],{},[97,239,241],{"class":99,"line":240},13,[97,242,146],{"emptyLinePlaceholder":145},[97,244,246],{"class":99,"line":245},14,[97,247,248],{},"class EmailService {\n",[97,250,252],{"class":99,"line":251},15,[97,253,254],{},"    public function sendWelcomeEmail(string $email): void {\n",[97,256,258],{"class":99,"line":257},16,[97,259,260],{},"        mail($email, \"Welcome!\", \"Thanks for registering.\");\n",[97,262,264],{"class":99,"line":263},17,[97,265,164],{},[97,267,269],{"class":99,"line":268},18,[97,270,170],{},[97,272,274],{"class":99,"line":273},19,[97,275,146],{"emptyLinePlaceholder":145},[97,277,279],{"class":99,"line":278},20,[97,280,103],{},[97,282,284],{"class":99,"line":283},21,[97,285,286],{},"    private UserRepository $repository;\n",[97,288,290],{"class":99,"line":289},22,[97,291,292],{},"    private EmailService $emailService;\n",[97,294,296],{"class":99,"line":295},23,[97,297,146],{"emptyLinePlaceholder":145},[97,299,301],{"class":99,"line":300},24,[97,302,303],{},"    public function __construct(UserRepository $repository, EmailService $emailService) {\n",[97,305,307],{"class":99,"line":306},25,[97,308,309],{},"        $this->repository = $repository;\n",[97,311,313],{"class":99,"line":312},26,[97,314,315],{},"        $this->emailService = $emailService;\n",[97,317,319],{"class":99,"line":318},27,[97,320,164],{},[97,322,324],{"class":99,"line":323},28,[97,325,146],{"emptyLinePlaceholder":145},[97,327,329],{"class":99,"line":328},29,[97,330,331],{},"    public function register(User $user): void {\n",[97,333,335],{"class":99,"line":334},30,[97,336,337],{},"        $this->repository->save($user);\n",[97,339,341],{"class":99,"line":340},31,[97,342,343],{},"        $this->emailService->sendWelcomeEmail($user->getEmail());\n",[97,345,347],{"class":99,"line":346},32,[97,348,164],{},[97,350,352],{"class":99,"line":351},33,[97,353,170],{},[53,355],{},[56,357,359],{"id":358},"_2-dependency-injection-and-modularity","2. Dependency Injection and Modularity",[11,361,362,363,366,367,370],{},"Modular code consists of small, loosely coupled units. The best way to manage dependencies and avoid hardcoded coupling is ",[21,364,365],{},"Dependency Injection (DI)",". Instead of creating database connections inside classes, inject them via the constructor (as shown in the ",[94,368,369],{},"UserRepository"," example above).",[11,372,373],{},"Using a DI Container (like PHP-DI, Laravel Service Container, or Symfony DependencyInjection) helps automate this process, making the codebase highly testable with mocks and stubs during unit tests.",[53,375],{},[56,377,379],{"id":378},"_3-adhering-to-psr-standards","3. Adhering to PSR Standards",[11,381,382],{},"To keep your code readable for other developers, follow the standards established by the PHP Framework Interop Group (PHP-FIG).",[25,384,385,391],{},[28,386,387,390],{},[21,388,389],{},"PSR-1 (Basic Coding Standard):"," Lays down basic rules for file structure, naming conventions (namespaces in CamelCase, constants in uppercase), and namespaces.",[28,392,393,396],{},[21,394,395],{},"PSR-12 (Extended Coding Style Guide):"," Supercedes the deprecated PSR-2. It defines strict rules for brace placement, indentation (always use 4 spaces, never tabs), line length, and type declarations.",[11,398,399],{},[400,401,402],"em",{},"Quick PSR-12 Example:",[87,404,406],{"className":89,"code":405,"language":91,"meta":92,"style":92},"namespace App\\Services;\n\nuse App\\Models\\User;\n\nclass UserService\n{\n    public function createUser(array $data): User\n    {\n        \u002F\u002F 4 spaces indentation, braces on separate lines for classes\u002Fmethods\n        return new User($data);\n    }\n}\n",[94,407,408,413,417,422,426,431,436,441,446,451,456,460],{"__ignoreMap":92},[97,409,410],{"class":99,"line":100},[97,411,412],{},"namespace App\\Services;\n",[97,414,415],{"class":99,"line":106},[97,416,146],{"emptyLinePlaceholder":145},[97,418,419],{"class":99,"line":112},[97,420,421],{},"use App\\Models\\User;\n",[97,423,424],{"class":99,"line":118},[97,425,146],{"emptyLinePlaceholder":145},[97,427,428],{"class":99,"line":124},[97,429,430],{},"class UserService\n",[97,432,433],{"class":99,"line":130},[97,434,435],{},"{\n",[97,437,438],{"class":99,"line":136},[97,439,440],{},"    public function createUser(array $data): User\n",[97,442,443],{"class":99,"line":142},[97,444,445],{},"    {\n",[97,447,448],{"class":99,"line":149},[97,449,450],{},"        \u002F\u002F 4 spaces indentation, braces on separate lines for classes\u002Fmethods\n",[97,452,453],{"class":99,"line":155},[97,454,455],{},"        return new User($data);\n",[97,457,458],{"class":99,"line":161},[97,459,164],{},[97,461,462],{"class":99,"line":167},[97,463,170],{},[53,465],{},[56,467,469],{"id":468},"code-quality-comparison-table","Code Quality Comparison Table",[471,472,473,490],"table",{},[474,475,476],"thead",{},[477,478,479,484,487],"tr",{},[480,481,483],"th",{"align":482},"left","Attribute",[480,485,486],{"align":482},"Legacy\u002FSpaghetti Code",[480,488,489],{"align":482},"Clean & Modular Code",[491,492,493,507,524,537],"tbody",{},[477,494,495,501,504],{},[496,497,498],"td",{"align":482},[21,499,500],{},"Testing",[496,502,503],{"align":482},"Difficult, requires real DB and SMTP servers",[496,505,506],{"align":482},"Easy, modules can be tested in isolation using mocks",[477,508,509,514,521],{},[496,510,511],{"align":482},[21,512,513],{},"Coupling",[496,515,516,517,520],{"align":482},"High (Tight coupling via ",[94,518,519],{},"new"," keyword)",[496,522,523],{"align":482},"Low (Loosely coupled via interfaces and DI)",[477,525,526,531,534],{},[496,527,528],{"align":482},[21,529,530],{},"Readability",[496,532,533],{"align":482},"Hard, long methods, nested conditional statements",[496,535,536],{"align":482},"High, small methods with single focus",[477,538,539,544,547],{},[496,540,541],{"align":482},[21,542,543],{},"Extensibility",[496,545,546],{"align":482},"High risk of breaking existing features",[496,548,549],{"align":482},"Safe, conforms to Open-Closed Principle",[53,551],{},[56,553,555],{"id":554},"frequently-asked-questions-faq","Frequently Asked Questions (FAQ)",[72,557,559],{"id":558},"what-is-the-difference-between-interface-and-abstract-class-in-clean-code","What is the difference between Interface and Abstract Class in clean code?",[11,561,562,563,566,567,570],{},"Use an ",[21,564,565],{},"Interface"," to define a contract of behavior (what a class can do) without providing any implementation. Use an ",[21,568,569],{},"Abstract Class"," when multiple classes share common code and behavior (how a class does something), allowing code reuse.",[72,572,574],{"id":573},"how-do-i-automate-coding-standards-checks-in-php","How do I automate coding standards checks in PHP?",[11,576,577],{},"You don't need to check PSR formatting manually. You can use command-line tooling to automate this:",[25,579,580,586,592],{},[28,581,582,585],{},[21,583,584],{},"PHP_CodeSniffer (PHPCS):"," Inspects and automatically formats code to match PSR-12.",[28,587,588,591],{},[21,589,590],{},"PHPStan \u002F Psalm:"," Static analysis tools that catch potential type bugs and runtime errors without running the code.",[28,593,594,597],{},[21,595,596],{},"Laravel Pint \u002F FriendsofPHP\u002FPHP-CS-Fixer:"," Opinionated code style formatters.",[72,599,601],{"id":600},"is-the-singleton-pattern-a-bad-practice","Is the Singleton Pattern a bad practice?",[11,603,604],{},"While Singleton is a classic design pattern, it is often considered an anti-pattern in modern PHP because it introduces global state, makes unit testing difficult, and hides dependencies. Using Dependency Injection is almost always a better choice.",[53,606],{},[56,608,610],{"id":609},"official-resources","Official Resources",[25,612,613,625,632],{},[28,614,615],{},[616,617,624],"a",{"href":618,"rel":619,"target":623},"https:\u002F\u002Fwww.php-fig.org\u002F",[620,621,622],"nofollow","noopener","noreferrer","_blank","PHP-FIG (PHP Framework Interop Group) Standards",[28,626,627],{},[616,628,631],{"href":629,"rel":630,"target":623},"https:\u002F\u002Fphp-di.org\u002F",[620,621,622],"PHP-DI (Dependency Injection Container) Docs",[28,633,634],{},[616,635,638],{"href":636,"rel":637,"target":623},"https:\u002F\u002Fphpstan.org\u002F",[620,621,622],"PHPStan - PHP Static Analysis Tool",[640,641,643],"h5",{"id":642},"changelog","Changelog",[25,645,646],{},[28,647,648],{},"2026-06-20: Modernized article with practical SOLID examples, comparison table, LLO formatting, and Turkish translation.",[650,651,652],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":92,"searchDepth":106,"depth":106,"links":654},[655,658,659,660,661,666],{"id":58,"depth":106,"text":59,"children":656},[657],{"id":74,"depth":112,"text":75},{"id":358,"depth":106,"text":359},{"id":378,"depth":106,"text":379},{"id":468,"depth":106,"text":469},{"id":554,"depth":106,"text":555,"children":662},[663,664,665],{"id":558,"depth":112,"text":559},{"id":573,"depth":112,"text":574},{"id":600,"depth":112,"text":601},{"id":609,"depth":106,"text":610},[668],"technical",null,"2023-01-17","Learn how to write clean, modular, and reusable PHP code using SOLID principles, design patterns, and PSR standards with practical code examples.",false,"md","\u002Fimages\u002Fhero\u002Fclean-modular-code.avif","en",{},"\u002Fwriting-clean-modular-and-reusable-code-in-php",{"title":6,"description":671},"writing-clean-modular-and-reusable-code-in-php",[91,681,682,683],"psr","solid","clean-code","clean-php-code","7sU7UrbVoae9Yd9ZOxTZ30ooueteCGgf1z2Ll5F1qj0",{"path":687},"\u002Ftr\u002Ftemiz-moduler-ve-yeniden-kullanilabilir-php-kodu-yazma-rehberi",{"prev":689,"next":692,"others":695,"lucky":800,"readingTime":118},{"path":690,"title":691},"\u002Fmaximize-the-potential-of-headless-wordpress-with-graphql","Maximize the Potential of Headless WordPress with GraphQL",{"path":693,"title":694},"\u002Fheadless-cmss-an-overview-of-popular-alternatives-to-contentful-and-wordpress","Headless CMSs: An Overview of Popular Alternatives to Contentful and WordPress",[696,699,702,705,708,711,714,717,720,723,726,729,732,735,738,739,740,743,746,749,752,755,758,761,764,767,770,773,776,779,782,785,788,791,794,797],{"path":697,"title":698},"\u002Ffull-stack-project-development","Sample REST API Project",{"path":700,"title":701},"\u002Frest-api-authentication","How to Perform REST API Authentication?",{"path":703,"title":704},"\u002Frest-api-design","REST API Design: Principles and Output Format",{"path":706,"title":707},"\u002Frest-api-documentation-and-testing","How to Document and Test a REST API?",{"path":709,"title":710},"\u002Frest-api-error-handling","How to Perform REST API Error Handling?",{"path":712,"title":713},"\u002Frest-api-security","How to Secure a REST API?",{"path":715,"title":716},"\u002Frest-api-uri-structure","What Should the REST API URI Structure Be?",{"path":718,"title":719},"\u002Ftroubleshooting-cyberpanel-inaccessibility-after-ubuntu-release-upgrade","Troubleshooting CyberPanel Inaccessibility After Ubuntu Release Upgrade",{"path":721,"title":722},"\u002Freset-wordpress-admin-password-using-wp-cli","Reset WordPress Admin Password Using WP-CLI",{"path":724,"title":725},"\u002Fgraphql-vs-rest-api-which-is-the-best-choice-for-headless-wordpress","GraphQL vs REST API: Which is the Best Choice for Headless WordPress?",{"path":727,"title":728},"\u002Fgrow-your-business-in-turkey-with-expert-wordpress-plugin-and-theme-localization-and-support-services","Grow Your Business in Turkey with Expert WordPress Plugin and Theme Localization and Support Services",{"path":730,"title":731},"\u002Fgetting-started-with-devops-understanding-the-principles-and-adopting-the-tools","Getting Started with DevOps: Understanding the Principles and Adopting the Tools",{"path":733,"title":734},"\u002Fphp-graphql-development-advanced-techniques-for-optimizing-your-apis","PHP GraphQL Development: Advanced Techniques for Optimizing Your APIs",{"path":736,"title":737},"\u002Fadvanced-techniques-for-dependency-injection-in-php-tips-code-samples-and-faqs","Advanced Techniques for Dependency Injection in PHP: Tips, Code Samples, and FAQs",{"path":690,"title":691},{"path":693,"title":694},{"path":741,"title":742},"\u002Fci-cd-for-php-a-comprehensive-guide","CI\u002FCD for PHP: A Comprehensive Guide",{"path":744,"title":745},"\u002Fintroduction-to-php-namespaces-a-beginners-guide-to-structuring-your-code","Introduction to PHP Namespaces: A Beginner's Guide to Structuring Your Code",{"path":747,"title":748},"\u002Fwhat-is-graylog-a-powerful-tool-for-collecting-indexing-and-analyzing-log-data","What is Graylog? A Powerful Tool for Collecting, Indexing, and Analyzing Log Data",{"path":750,"title":751},"\u002Felevate-your-turkish-audience-experience-with-professional-wordpress-plugin-and-theme-translation","Elevate Your Turkish Audience Experience with Professional WordPress Plugin and Theme Translation",{"path":753,"title":754},"\u002Fhow-to-set-up-a-self-hosted-api-gateway-a-comprehensive-guide","How to Set Up a Self-Hosted API Gateway: A Comprehensive Guide",{"path":756,"title":757},"\u002Fdifference-between-generators-and-iterators-in-php","The Key Differences Between PHP Generators and Iterators",{"path":759,"title":760},"\u002Fphp-and-machine-learning-a-winning-combination-with-php-ml","PHP and Machine Learning: A Winning Combination with PHP-ML",{"path":762,"title":763},"\u002Fphp-generators-a-beginners-guide-to-iteration","PHP Generators: A Beginner's Guide to Iteration",{"path":765,"title":766},"\u002Fmastering-closures-in-javascript-a-beginners-guide","Mastering Closures in JavaScript: A Beginner's Guide",{"path":768,"title":769},"\u002Fthe-top-php-certification-programs-for-developers","The Top PHP Certification Programs for Developers",{"path":771,"title":772},"\u002Fhow-to-revalidate-next-js-isr-cache-on-demand-cache-regeneration","How to Revalidate Next.js ISR Cache? On-Demand Cache Regeneration",{"path":774,"title":775},"\u002Ftips-for-translating-a-wordpress-plugin-wordpress-theme-to-turkish","Tips for Translating a WordPress Plugin \u002F WordPress Theme to Turkish",{"path":777,"title":778},"\u002Fall-about-headless-wordpress","All About Headless WordPress",{"path":780,"title":781},"\u002Finstall-composer-on-ubuntu","How to Install Composer on Ubuntu \u002F Linux",{"path":783,"title":784},"\u002Fwhat-is-an-api-gateway","What is an API Gateway? Should You Use It?",{"path":786,"title":787},"\u002Fis-jwt-safe-or-is-it-vulnerable","Is JWT Safe or Is It Vulnerable?",{"path":789,"title":790},"\u002Ftailwind-css-to-use-or-not-to-use-that-is-the-question","Tailwind CSS! To use? Or not to use? That is the question.",{"path":792,"title":793},"\u002Fwhat-is-hateoas","What is HATEOAS?",{"path":795,"title":796},"\u002Fhello-world","Hello World: A New Multilingual Journey",{"path":798,"title":799},"\u002Fwhat-is-ecmascript","What is ECMAScript? What is not?",{"path":690,"title":691},[802,804,806,808],{"path":697,"title":698,"date":803},"2026-06-20",{"path":733,"title":734,"date":805},"2023-01-19",{"path":744,"title":745,"date":807},"2023-01-13",{"path":762,"title":763,"date":809},"2023-01-10",[811,813,815],{"path":759,"title":760,"date":812},"2023-01-11",{"path":736,"title":737,"date":814},"2023-01-18",{"path":783,"title":784,"date":816},"2022-05-13",1782141980356]