Deployed 59ff7f1 to 5.4 with MkDocs 1.1.2 and mike 0.5.5
[GitHub/WoltLab/woltlab.github.io.git] / 5.4 / php / code-style / index.html
1
2 <!doctype html>
3 <html lang="en" class="no-js">
4 <head>
5
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width,initial-scale=1">
8
9
10
11
12 <link rel="icon" href="../../assets/default.favicon.ico">
13 <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.0">
14
15
16
17 <title>Code Style - WoltLab Suite Documentation</title>
18
19
20
21 <link rel="stylesheet" href="../../assets/stylesheets/main.33e2939f.min.css">
22
23
24 <link rel="stylesheet" href="../../assets/stylesheets/palette.ef6f36e2.min.css">
25
26
27
28 <meta name="theme-color" content="#009485">
29
30
31
32
33
34
35
36
37
38 <link rel="stylesheet" href="../../stylesheets/extra.css">
39
40
41
42
43
44 </head>
45
46
47
48
49
50
51
52 <body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent="">
53
54
55 <script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
56
57 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
58 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
59 <label class="md-overlay" for="__drawer"></label>
60 <div data-md-component="skip">
61
62
63 <a href="#code-style" class="md-skip">
64 Skip to content
65 </a>
66
67 </div>
68 <div data-md-component="announce">
69
70 <aside class="md-announce">
71 <div class="md-announce__inner md-grid md-typeset">
72
73 <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a>
74
75 </div>
76 </aside>
77
78 </div>
79
80 <header class="md-header" data-md-component="header">
81 <nav class="md-header__inner md-grid" aria-label="Header">
82 <a href="../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
83
84 <img src="../../assets/logo.png" alt="logo">
85
86 </a>
87 <label class="md-header__button md-icon" for="__drawer">
88 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
89 </label>
90 <div class="md-header__title" data-md-component="header-title">
91 <div class="md-header__ellipsis">
92 <div class="md-header__topic">
93 <span class="md-ellipsis">
94 WoltLab Suite Documentation
95 </span>
96 </div>
97 <div class="md-header__topic" data-md-component="header-topic">
98 <span class="md-ellipsis">
99
100 Code Style
101
102 </span>
103 </div>
104 </div>
105 </div>
106
107
108
109 <label class="md-header__button md-icon" for="__search">
110 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
111 </label>
112
113 <div class="md-search" data-md-component="search" role="dialog">
114 <label class="md-search__overlay" for="__search"></label>
115 <div class="md-search__inner" role="search">
116 <form class="md-search__form" name="search">
117 <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
118 <label class="md-search__icon md-icon" for="__search">
119 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
120 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
121 </label>
122 <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
123 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
124 </button>
125 </form>
126 <div class="md-search__output">
127 <div class="md-search__scrollwrap" data-md-scrollfix>
128 <div class="md-search-result" data-md-component="search-result">
129 <div class="md-search-result__meta">
130 Initializing search
131 </div>
132 <ol class="md-search-result__list"></ol>
133 </div>
134 </div>
135 </div>
136 </div>
137 </div>
138
139
140 <div class="md-header__source">
141
142 <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
143 <div class="md-source__icon md-icon">
144
145 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
146 </div>
147 <div class="md-source__repository">
148 GitHub
149 </div>
150 </a>
151 </div>
152
153 </nav>
154 </header>
155
156 <div class="md-container" data-md-component="container">
157
158
159
160
161 <main class="md-main" data-md-component="main">
162 <div class="md-main__inner md-grid">
163
164
165
166 <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
167 <div class="md-sidebar__scrollwrap">
168 <div class="md-sidebar__inner">
169
170
171
172 <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
173 <label class="md-nav__title" for="__drawer">
174 <a href="../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
175
176 <img src="../../assets/logo.png" alt="logo">
177
178 </a>
179 WoltLab Suite Documentation
180 </label>
181
182 <div class="md-nav__source">
183
184 <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
185 <div class="md-source__icon md-icon">
186
187 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
188 </div>
189 <div class="md-source__repository">
190 GitHub
191 </div>
192 </a>
193 </div>
194
195 <ul class="md-nav__list" data-md-scrollfix>
196
197
198
199
200
201
202
203
204 <li class="md-nav__item">
205 <a href="../../getting-started/" class="md-nav__link">
206 Getting Started
207 </a>
208 </li>
209
210
211
212
213
214
215
216
217
218
219
220
221
222 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
223
224
225 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
226
227 <label class="md-nav__link" for="__nav_2">
228 PHP API
229 <span class="md-nav__icon md-icon"></span>
230 </label>
231 <nav class="md-nav" aria-label="PHP API" data-md-level="1">
232 <label class="md-nav__title" for="__nav_2">
233 <span class="md-nav__icon md-icon"></span>
234 PHP API
235 </label>
236 <ul class="md-nav__list" data-md-scrollfix>
237
238
239
240
241
242 <li class="md-nav__item">
243 <a href="../pages/" class="md-nav__link">
244 Pages
245 </a>
246 </li>
247
248
249
250
251
252
253
254 <li class="md-nav__item">
255 <a href="../database-objects/" class="md-nav__link">
256 Database Objects
257 </a>
258 </li>
259
260
261
262
263
264
265
266 <li class="md-nav__item">
267 <a href="../database-access/" class="md-nav__link">
268 Database Access
269 </a>
270 </li>
271
272
273
274
275
276
277
278 <li class="md-nav__item">
279 <a href="../exceptions/" class="md-nav__link">
280 Exceptions
281 </a>
282 </li>
283
284
285
286
287
288
289
290
291 <li class="md-nav__item md-nav__item--nested">
292
293
294 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" >
295
296 <label class="md-nav__link" for="__nav_2_5">
297 API
298 <span class="md-nav__icon md-icon"></span>
299 </label>
300 <nav class="md-nav" aria-label="API" data-md-level="2">
301 <label class="md-nav__title" for="__nav_2_5">
302 <span class="md-nav__icon md-icon"></span>
303 API
304 </label>
305 <ul class="md-nav__list" data-md-scrollfix>
306
307
308
309
310
311
312 <li class="md-nav__item md-nav__item--nested">
313
314
315 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_1" type="checkbox" id="__nav_2_5_1" >
316
317 <label class="md-nav__link" for="__nav_2_5_1">
318 Caches
319 <span class="md-nav__icon md-icon"></span>
320 </label>
321 <nav class="md-nav" aria-label="Caches" data-md-level="3">
322 <label class="md-nav__title" for="__nav_2_5_1">
323 <span class="md-nav__icon md-icon"></span>
324 Caches
325 </label>
326 <ul class="md-nav__list" data-md-scrollfix>
327
328
329
330
331
332 <li class="md-nav__item">
333 <a href="../api/caches/" class="md-nav__link">
334 Overview
335 </a>
336 </li>
337
338
339
340
341
342
343
344 <li class="md-nav__item">
345 <a href="../api/caches_persistent-caches/" class="md-nav__link">
346 Persistent Caches
347 </a>
348 </li>
349
350
351
352
353
354
355
356 <li class="md-nav__item">
357 <a href="../api/caches_runtime-caches/" class="md-nav__link">
358 Runtime Caches
359 </a>
360 </li>
361
362
363
364 </ul>
365 </nav>
366 </li>
367
368
369
370
371
372
373
374 <li class="md-nav__item">
375 <a href="../api/comments/" class="md-nav__link">
376 Comments
377 </a>
378 </li>
379
380
381
382
383
384
385
386 <li class="md-nav__item">
387 <a href="../api/cronjobs/" class="md-nav__link">
388 Cronjobs
389 </a>
390 </li>
391
392
393
394
395
396
397
398 <li class="md-nav__item">
399 <a href="../api/events/" class="md-nav__link">
400 Events
401 </a>
402 </li>
403
404
405
406
407
408
409
410
411 <li class="md-nav__item md-nav__item--nested">
412
413
414 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" >
415
416 <label class="md-nav__link" for="__nav_2_5_5">
417 Form Builder
418 <span class="md-nav__icon md-icon"></span>
419 </label>
420 <nav class="md-nav" aria-label="Form Builder" data-md-level="3">
421 <label class="md-nav__title" for="__nav_2_5_5">
422 <span class="md-nav__icon md-icon"></span>
423 Form Builder
424 </label>
425 <ul class="md-nav__list" data-md-scrollfix>
426
427
428
429
430
431 <li class="md-nav__item">
432 <a href="../api/form_builder/overview/" class="md-nav__link">
433 Overview
434 </a>
435 </li>
436
437
438
439
440
441
442
443 <li class="md-nav__item">
444 <a href="../api/form_builder/structure/" class="md-nav__link">
445 Structure
446 </a>
447 </li>
448
449
450
451
452
453
454
455 <li class="md-nav__item">
456 <a href="../api/form_builder/form_fields/" class="md-nav__link">
457 Fields
458 </a>
459 </li>
460
461
462
463
464
465
466
467 <li class="md-nav__item">
468 <a href="../api/form_builder/validation_data/" class="md-nav__link">
469 Validation and Data
470 </a>
471 </li>
472
473
474
475
476
477
478
479 <li class="md-nav__item">
480 <a href="../api/form_builder/dependencies/" class="md-nav__link">
481 Dependencies
482 </a>
483 </li>
484
485
486
487 </ul>
488 </nav>
489 </li>
490
491
492
493
494
495
496
497 <li class="md-nav__item">
498 <a href="../api/package_installation_plugins/" class="md-nav__link">
499 Package Installation Plugins
500 </a>
501 </li>
502
503
504
505
506
507
508
509 <li class="md-nav__item">
510 <a href="../api/user_activity_points/" class="md-nav__link">
511 User Activity Points
512 </a>
513 </li>
514
515
516
517
518
519
520
521 <li class="md-nav__item">
522 <a href="../api/user_notifications/" class="md-nav__link">
523 User Notifications
524 </a>
525 </li>
526
527
528
529
530
531
532
533 <li class="md-nav__item">
534 <a href="../api/sitemaps/" class="md-nav__link">
535 Sitemaps
536 </a>
537 </li>
538
539
540
541 </ul>
542 </nav>
543 </li>
544
545
546
547
548
549
550
551
552
553 <li class="md-nav__item md-nav__item--active">
554
555 <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
556
557
558
559
560 <label class="md-nav__link md-nav__link--active" for="__toc">
561 Code Style
562 <span class="md-nav__icon md-icon"></span>
563 </label>
564
565 <a href="./" class="md-nav__link md-nav__link--active">
566 Code Style
567 </a>
568
569
570 <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
571
572
573
574
575
576 <label class="md-nav__title" for="__toc">
577 <span class="md-nav__icon md-icon"></span>
578 Table of contents
579 </label>
580 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
581
582 <li class="md-nav__item">
583 <a href="#general-code-style" class="md-nav__link">
584 General Code Style
585 </a>
586
587 <nav class="md-nav" aria-label="General Code Style">
588 <ul class="md-nav__list">
589
590 <li class="md-nav__item">
591 <a href="#naming-conventions" class="md-nav__link">
592 Naming conventions
593 </a>
594
595 </li>
596
597 <li class="md-nav__item">
598 <a href="#arrays" class="md-nav__link">
599 Arrays
600 </a>
601
602 </li>
603
604 <li class="md-nav__item">
605 <a href="#ternary-operator" class="md-nav__link">
606 Ternary Operator
607 </a>
608
609 </li>
610
611 <li class="md-nav__item">
612 <a href="#whitespaces" class="md-nav__link">
613 Whitespaces
614 </a>
615
616 </li>
617
618 </ul>
619 </nav>
620
621 </li>
622
623 <li class="md-nav__item">
624 <a href="#classes" class="md-nav__link">
625 Classes
626 </a>
627
628 <nav class="md-nav" aria-label="Classes">
629 <ul class="md-nav__list">
630
631 <li class="md-nav__item">
632 <a href="#referencing-class-names" class="md-nav__link">
633 Referencing Class Names
634 </a>
635
636 </li>
637
638 <li class="md-nav__item">
639 <a href="#static-getters-of-databaseobject-classes" class="md-nav__link">
640 Static Getters (of DatabaseObject Classes)
641 </a>
642
643 </li>
644
645 <li class="md-nav__item">
646 <a href="#long-method-calls" class="md-nav__link">
647 Long method calls
648 </a>
649
650 </li>
651
652 </ul>
653 </nav>
654
655 </li>
656
657 </ul>
658
659 </nav>
660
661 </li>
662
663
664
665
666
667
668
669 <li class="md-nav__item">
670 <a href="../apps/" class="md-nav__link">
671 Apps
672 </a>
673 </li>
674
675
676
677
678
679
680
681 <li class="md-nav__item">
682 <a href="../gdpr/" class="md-nav__link">
683 GDPR
684 </a>
685 </li>
686
687
688
689 </ul>
690 </nav>
691 </li>
692
693
694
695
696
697
698
699
700
701
702
703 <li class="md-nav__item md-nav__item--nested">
704
705
706 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
707
708 <label class="md-nav__link" for="__nav_3">
709 Languages, Templates & CSS
710 <span class="md-nav__icon md-icon"></span>
711 </label>
712 <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1">
713 <label class="md-nav__title" for="__nav_3">
714 <span class="md-nav__icon md-icon"></span>
715 Languages, Templates & CSS
716 </label>
717 <ul class="md-nav__list" data-md-scrollfix>
718
719
720
721
722
723 <li class="md-nav__item">
724 <a href="../../view/languages/" class="md-nav__link">
725 Languages
726 </a>
727 </li>
728
729
730
731
732
733
734
735 <li class="md-nav__item">
736 <a href="../../view/templates/" class="md-nav__link">
737 Templates
738 </a>
739 </li>
740
741
742
743
744
745
746
747 <li class="md-nav__item">
748 <a href="../../view/template-plugins/" class="md-nav__link">
749 Template Plugins
750 </a>
751 </li>
752
753
754
755
756
757
758
759 <li class="md-nav__item">
760 <a href="../../view/css/" class="md-nav__link">
761 CSS
762 </a>
763 </li>
764
765
766
767 </ul>
768 </nav>
769 </li>
770
771
772
773
774
775
776
777
778
779
780
781 <li class="md-nav__item md-nav__item--nested">
782
783
784 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
785
786 <label class="md-nav__link" for="__nav_4">
787 TypeScript and JavaScript API
788 <span class="md-nav__icon md-icon"></span>
789 </label>
790 <nav class="md-nav" aria-label="TypeScript and JavaScript API" data-md-level="1">
791 <label class="md-nav__title" for="__nav_4">
792 <span class="md-nav__icon md-icon"></span>
793 TypeScript and JavaScript API
794 </label>
795 <ul class="md-nav__list" data-md-scrollfix>
796
797
798
799
800
801 <li class="md-nav__item">
802 <a href="../../javascript/general-usage/" class="md-nav__link">
803 General Usage
804 </a>
805 </li>
806
807
808
809
810
811
812
813 <li class="md-nav__item">
814 <a href="../../javascript/typescript/" class="md-nav__link">
815 TypeScript
816 </a>
817 </li>
818
819
820
821
822
823
824
825
826 <li class="md-nav__item md-nav__item--nested">
827
828
829 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_3" type="checkbox" id="__nav_4_3" >
830
831 <label class="md-nav__link" for="__nav_4_3">
832 New API
833 <span class="md-nav__icon md-icon"></span>
834 </label>
835 <nav class="md-nav" aria-label="New API" data-md-level="2">
836 <label class="md-nav__title" for="__nav_4_3">
837 <span class="md-nav__icon md-icon"></span>
838 New API
839 </label>
840 <ul class="md-nav__list" data-md-scrollfix>
841
842
843
844
845
846 <li class="md-nav__item">
847 <a href="../../javascript/new-api_writing-a-module/" class="md-nav__link">
848 Writing a module
849 </a>
850 </li>
851
852
853
854
855
856
857
858 <li class="md-nav__item">
859 <a href="../../javascript/new-api_data-structures/" class="md-nav__link">
860 Data Structures
861 </a>
862 </li>
863
864
865
866
867
868
869
870 <li class="md-nav__item">
871 <a href="../../javascript/new-api_core/" class="md-nav__link">
872 Core Functions
873 </a>
874 </li>
875
876
877
878
879
880
881
882 <li class="md-nav__item">
883 <a href="../../javascript/new-api_dom/" class="md-nav__link">
884 DOM
885 </a>
886 </li>
887
888
889
890
891
892
893
894 <li class="md-nav__item">
895 <a href="../../javascript/new-api_events/" class="md-nav__link">
896 Event Handling
897 </a>
898 </li>
899
900
901
902
903
904
905
906 <li class="md-nav__item">
907 <a href="../../javascript/new-api_ajax/" class="md-nav__link">
908 Ajax
909 </a>
910 </li>
911
912
913
914
915
916
917
918 <li class="md-nav__item">
919 <a href="../../javascript/new-api_dialogs/" class="md-nav__link">
920 Dialogs
921 </a>
922 </li>
923
924
925
926
927
928
929
930 <li class="md-nav__item">
931 <a href="../../javascript/new-api_browser/" class="md-nav__link">
932 Browser and Screen Sizes
933 </a>
934 </li>
935
936
937
938
939
940
941
942 <li class="md-nav__item">
943 <a href="../../javascript/new-api_ui/" class="md-nav__link">
944 User Interface
945 </a>
946 </li>
947
948
949
950 </ul>
951 </nav>
952 </li>
953
954
955
956
957
958
959
960 <li class="md-nav__item">
961 <a href="../../javascript/legacy-api/" class="md-nav__link">
962 Legacy API
963 </a>
964 </li>
965
966
967
968
969
970
971
972 <li class="md-nav__item">
973 <a href="../../javascript/helper-functions/" class="md-nav__link">
974 Helper Functions
975 </a>
976 </li>
977
978
979
980
981
982
983
984 <li class="md-nav__item">
985 <a href="../../javascript/code-snippets/" class="md-nav__link">
986 Code Snippets
987 </a>
988 </li>
989
990
991
992 </ul>
993 </nav>
994 </li>
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006 <li class="md-nav__item md-nav__item--nested">
1007
1008
1009 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
1010
1011 <label class="md-nav__link" for="__nav_5">
1012 Package Components
1013 <span class="md-nav__icon md-icon"></span>
1014 </label>
1015 <nav class="md-nav" aria-label="Package Components" data-md-level="1">
1016 <label class="md-nav__title" for="__nav_5">
1017 <span class="md-nav__icon md-icon"></span>
1018 Package Components
1019 </label>
1020 <ul class="md-nav__list" data-md-scrollfix>
1021
1022
1023
1024
1025
1026 <li class="md-nav__item">
1027 <a href="../../package/package-xml/" class="md-nav__link">
1028 package.xml
1029 </a>
1030 </li>
1031
1032
1033
1034
1035
1036
1037
1038
1039 <li class="md-nav__item md-nav__item--nested">
1040
1041
1042 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
1043
1044 <label class="md-nav__link" for="__nav_5_2">
1045 PIPs
1046 <span class="md-nav__icon md-icon"></span>
1047 </label>
1048 <nav class="md-nav" aria-label="PIPs" data-md-level="2">
1049 <label class="md-nav__title" for="__nav_5_2">
1050 <span class="md-nav__icon md-icon"></span>
1051 PIPs
1052 </label>
1053 <ul class="md-nav__list" data-md-scrollfix>
1054
1055
1056
1057
1058
1059 <li class="md-nav__item">
1060 <a href="../../package/pip/" class="md-nav__link">
1061 Overview
1062 </a>
1063 </li>
1064
1065
1066
1067
1068
1069
1070
1071 <li class="md-nav__item">
1072 <a href="../../package/pip/acl-option/" class="md-nav__link">
1073 aclOption
1074 </a>
1075 </li>
1076
1077
1078
1079
1080
1081
1082
1083 <li class="md-nav__item">
1084 <a href="../../package/pip/acp-menu/" class="md-nav__link">
1085 acpMenu
1086 </a>
1087 </li>
1088
1089
1090
1091
1092
1093
1094
1095 <li class="md-nav__item">
1096 <a href="../../package/pip/acp-search-provider/" class="md-nav__link">
1097 acpSearchProvider
1098 </a>
1099 </li>
1100
1101
1102
1103
1104
1105
1106
1107 <li class="md-nav__item">
1108 <a href="../../package/pip/acp-template/" class="md-nav__link">
1109 acpTemplate
1110 </a>
1111 </li>
1112
1113
1114
1115
1116
1117
1118
1119 <li class="md-nav__item">
1120 <a href="../../package/pip/bbcode/" class="md-nav__link">
1121 bbcode
1122 </a>
1123 </li>
1124
1125
1126
1127
1128
1129
1130
1131 <li class="md-nav__item">
1132 <a href="../../package/pip/box/" class="md-nav__link">
1133 box
1134 </a>
1135 </li>
1136
1137
1138
1139
1140
1141
1142
1143 <li class="md-nav__item">
1144 <a href="../../package/pip/clipboard-action/" class="md-nav__link">
1145 clipboardAction
1146 </a>
1147 </li>
1148
1149
1150
1151
1152
1153
1154
1155 <li class="md-nav__item">
1156 <a href="../../package/pip/core-object/" class="md-nav__link">
1157 coreObject
1158 </a>
1159 </li>
1160
1161
1162
1163
1164
1165
1166
1167 <li class="md-nav__item">
1168 <a href="../../package/pip/cronjob/" class="md-nav__link">
1169 cronjob
1170 </a>
1171 </li>
1172
1173
1174
1175
1176
1177
1178
1179 <li class="md-nav__item">
1180 <a href="../../package/pip/database/" class="md-nav__link">
1181 database
1182 </a>
1183 </li>
1184
1185
1186
1187
1188
1189
1190
1191 <li class="md-nav__item">
1192 <a href="../../package/pip/event-listener/" class="md-nav__link">
1193 eventListener
1194 </a>
1195 </li>
1196
1197
1198
1199
1200
1201
1202
1203 <li class="md-nav__item">
1204 <a href="../../package/pip/file/" class="md-nav__link">
1205 file
1206 </a>
1207 </li>
1208
1209
1210
1211
1212
1213
1214
1215 <li class="md-nav__item">
1216 <a href="../../package/pip/language/" class="md-nav__link">
1217 language
1218 </a>
1219 </li>
1220
1221
1222
1223
1224
1225
1226
1227 <li class="md-nav__item">
1228 <a href="../../package/pip/media-provider/" class="md-nav__link">
1229 mediaProvider
1230 </a>
1231 </li>
1232
1233
1234
1235
1236
1237
1238
1239 <li class="md-nav__item">
1240 <a href="../../package/pip/menu/" class="md-nav__link">
1241 menu
1242 </a>
1243 </li>
1244
1245
1246
1247
1248
1249
1250
1251 <li class="md-nav__item">
1252 <a href="../../package/pip/menu-item/" class="md-nav__link">
1253 menuItem
1254 </a>
1255 </li>
1256
1257
1258
1259
1260
1261
1262
1263 <li class="md-nav__item">
1264 <a href="../../package/pip/object-type/" class="md-nav__link">
1265 objectType
1266 </a>
1267 </li>
1268
1269
1270
1271
1272
1273
1274
1275 <li class="md-nav__item">
1276 <a href="../../package/pip/object-type-definition/" class="md-nav__link">
1277 objectTypeDefinition
1278 </a>
1279 </li>
1280
1281
1282
1283
1284
1285
1286
1287 <li class="md-nav__item">
1288 <a href="../../package/pip/option/" class="md-nav__link">
1289 option
1290 </a>
1291 </li>
1292
1293
1294
1295
1296
1297
1298
1299 <li class="md-nav__item">
1300 <a href="../../package/pip/page/" class="md-nav__link">
1301 page
1302 </a>
1303 </li>
1304
1305
1306
1307
1308
1309
1310
1311 <li class="md-nav__item">
1312 <a href="../../package/pip/pip/" class="md-nav__link">
1313 pip
1314 </a>
1315 </li>
1316
1317
1318
1319
1320
1321
1322
1323 <li class="md-nav__item">
1324 <a href="../../package/pip/script/" class="md-nav__link">
1325 script
1326 </a>
1327 </li>
1328
1329
1330
1331
1332
1333
1334
1335 <li class="md-nav__item">
1336 <a href="../../package/pip/smiley/" class="md-nav__link">
1337 smiley
1338 </a>
1339 </li>
1340
1341
1342
1343
1344
1345
1346
1347 <li class="md-nav__item">
1348 <a href="../../package/pip/sql/" class="md-nav__link">
1349 sql
1350 </a>
1351 </li>
1352
1353
1354
1355
1356
1357
1358
1359 <li class="md-nav__item">
1360 <a href="../../package/pip/style/" class="md-nav__link">
1361 style
1362 </a>
1363 </li>
1364
1365
1366
1367
1368
1369
1370
1371 <li class="md-nav__item">
1372 <a href="../../package/pip/template/" class="md-nav__link">
1373 template
1374 </a>
1375 </li>
1376
1377
1378
1379
1380
1381
1382
1383 <li class="md-nav__item">
1384 <a href="../../package/pip/template-listener/" class="md-nav__link">
1385 templateListener
1386 </a>
1387 </li>
1388
1389
1390
1391
1392
1393
1394
1395 <li class="md-nav__item">
1396 <a href="../../package/pip/user-group-option/" class="md-nav__link">
1397 userGroupOption
1398 </a>
1399 </li>
1400
1401
1402
1403
1404
1405
1406
1407 <li class="md-nav__item">
1408 <a href="../../package/pip/user-menu/" class="md-nav__link">
1409 userMenu
1410 </a>
1411 </li>
1412
1413
1414
1415
1416
1417
1418
1419 <li class="md-nav__item">
1420 <a href="../../package/pip/user-notification-event/" class="md-nav__link">
1421 userNotificationEvent
1422 </a>
1423 </li>
1424
1425
1426
1427
1428
1429
1430
1431 <li class="md-nav__item">
1432 <a href="../../package/pip/user-option/" class="md-nav__link">
1433 userOption
1434 </a>
1435 </li>
1436
1437
1438
1439
1440
1441
1442
1443 <li class="md-nav__item">
1444 <a href="../../package/pip/user-profile-menu/" class="md-nav__link">
1445 userProfileMenu
1446 </a>
1447 </li>
1448
1449
1450
1451 </ul>
1452 </nav>
1453 </li>
1454
1455
1456
1457
1458
1459
1460
1461 <li class="md-nav__item">
1462 <a href="../../package/database-php-api/" class="md-nav__link">
1463 Database PHP API
1464 </a>
1465 </li>
1466
1467
1468
1469 </ul>
1470 </nav>
1471 </li>
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483 <li class="md-nav__item md-nav__item--nested">
1484
1485
1486 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
1487
1488 <label class="md-nav__link" for="__nav_6">
1489 Migration
1490 <span class="md-nav__icon md-icon"></span>
1491 </label>
1492 <nav class="md-nav" aria-label="Migration" data-md-level="1">
1493 <label class="md-nav__title" for="__nav_6">
1494 <span class="md-nav__icon md-icon"></span>
1495 Migration
1496 </label>
1497 <ul class="md-nav__list" data-md-scrollfix>
1498
1499
1500
1501
1502
1503
1504 <li class="md-nav__item md-nav__item--nested">
1505
1506
1507 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" >
1508
1509 <label class="md-nav__link" for="__nav_6_1">
1510 Migrating from WSC 5.3
1511 <span class="md-nav__icon md-icon"></span>
1512 </label>
1513 <nav class="md-nav" aria-label="Migrating from WSC 5.3" data-md-level="2">
1514 <label class="md-nav__title" for="__nav_6_1">
1515 <span class="md-nav__icon md-icon"></span>
1516 Migrating from WSC 5.3
1517 </label>
1518 <ul class="md-nav__list" data-md-scrollfix>
1519
1520
1521
1522
1523
1524 <li class="md-nav__item">
1525 <a href="../../migration/wsc53/php/" class="md-nav__link">
1526 PHP API
1527 </a>
1528 </li>
1529
1530
1531
1532
1533
1534
1535
1536 <li class="md-nav__item">
1537 <a href="../../migration/wsc53/session/" class="md-nav__link">
1538 Session Handling and Authentication
1539 </a>
1540 </li>
1541
1542
1543
1544
1545
1546
1547
1548 <li class="md-nav__item">
1549 <a href="../../migration/wsc53/javascript/" class="md-nav__link">
1550 TypeScript and JavaScript
1551 </a>
1552 </li>
1553
1554
1555
1556
1557
1558
1559
1560 <li class="md-nav__item">
1561 <a href="../../migration/wsc53/templates/" class="md-nav__link">
1562 Templates
1563 </a>
1564 </li>
1565
1566
1567
1568
1569
1570
1571
1572 <li class="md-nav__item">
1573 <a href="../../migration/wsc53/libraries/" class="md-nav__link">
1574 Third Party Libraries
1575 </a>
1576 </li>
1577
1578
1579
1580 </ul>
1581 </nav>
1582 </li>
1583
1584
1585
1586
1587
1588
1589
1590
1591 <li class="md-nav__item md-nav__item--nested">
1592
1593
1594 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" >
1595
1596 <label class="md-nav__link" for="__nav_6_2">
1597 Migrating from WSC 5.2
1598 <span class="md-nav__icon md-icon"></span>
1599 </label>
1600 <nav class="md-nav" aria-label="Migrating from WSC 5.2" data-md-level="2">
1601 <label class="md-nav__title" for="__nav_6_2">
1602 <span class="md-nav__icon md-icon"></span>
1603 Migrating from WSC 5.2
1604 </label>
1605 <ul class="md-nav__list" data-md-scrollfix>
1606
1607
1608
1609
1610
1611 <li class="md-nav__item">
1612 <a href="../../migration/wsc52/php/" class="md-nav__link">
1613 PHP API
1614 </a>
1615 </li>
1616
1617
1618
1619
1620
1621
1622
1623 <li class="md-nav__item">
1624 <a href="../../migration/wsc52/templates/" class="md-nav__link">
1625 Templates and Languages
1626 </a>
1627 </li>
1628
1629
1630
1631
1632
1633
1634
1635 <li class="md-nav__item">
1636 <a href="../../migration/wsc52/libraries/" class="md-nav__link">
1637 Third Party Libraries
1638 </a>
1639 </li>
1640
1641
1642
1643 </ul>
1644 </nav>
1645 </li>
1646
1647
1648
1649
1650
1651
1652
1653
1654 <li class="md-nav__item md-nav__item--nested">
1655
1656
1657 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" >
1658
1659 <label class="md-nav__link" for="__nav_6_3">
1660 Migrating from WSC 3.1
1661 <span class="md-nav__icon md-icon"></span>
1662 </label>
1663 <nav class="md-nav" aria-label="Migrating from WSC 3.1" data-md-level="2">
1664 <label class="md-nav__title" for="__nav_6_3">
1665 <span class="md-nav__icon md-icon"></span>
1666 Migrating from WSC 3.1
1667 </label>
1668 <ul class="md-nav__list" data-md-scrollfix>
1669
1670
1671
1672
1673
1674 <li class="md-nav__item">
1675 <a href="../../migration/wsc31/php/" class="md-nav__link">
1676 PHP API
1677 </a>
1678 </li>
1679
1680
1681
1682 </ul>
1683 </nav>
1684 </li>
1685
1686
1687
1688
1689
1690
1691
1692
1693 <li class="md-nav__item md-nav__item--nested">
1694
1695
1696 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" >
1697
1698 <label class="md-nav__link" for="__nav_6_4">
1699 Migrating from WSC 3.0
1700 <span class="md-nav__icon md-icon"></span>
1701 </label>
1702 <nav class="md-nav" aria-label="Migrating from WSC 3.0" data-md-level="2">
1703 <label class="md-nav__title" for="__nav_6_4">
1704 <span class="md-nav__icon md-icon"></span>
1705 Migrating from WSC 3.0
1706 </label>
1707 <ul class="md-nav__list" data-md-scrollfix>
1708
1709
1710
1711
1712
1713 <li class="md-nav__item">
1714 <a href="../../migration/wsc30/php/" class="md-nav__link">
1715 PHP API
1716 </a>
1717 </li>
1718
1719
1720
1721
1722
1723
1724
1725 <li class="md-nav__item">
1726 <a href="../../migration/wsc30/javascript/" class="md-nav__link">
1727 JavaScript API
1728 </a>
1729 </li>
1730
1731
1732
1733
1734
1735
1736
1737 <li class="md-nav__item">
1738 <a href="../../migration/wsc30/templates/" class="md-nav__link">
1739 Templates
1740 </a>
1741 </li>
1742
1743
1744
1745
1746
1747
1748
1749 <li class="md-nav__item">
1750 <a href="../../migration/wsc30/css/" class="md-nav__link">
1751 CSS
1752 </a>
1753 </li>
1754
1755
1756
1757
1758
1759
1760
1761 <li class="md-nav__item">
1762 <a href="../../migration/wsc30/package/" class="md-nav__link">
1763 Package Components
1764 </a>
1765 </li>
1766
1767
1768
1769 </ul>
1770 </nav>
1771 </li>
1772
1773
1774
1775
1776
1777
1778
1779
1780 <li class="md-nav__item md-nav__item--nested">
1781
1782
1783 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" >
1784
1785 <label class="md-nav__link" for="__nav_6_5">
1786 Migrating from WCF 2.1
1787 <span class="md-nav__icon md-icon"></span>
1788 </label>
1789 <nav class="md-nav" aria-label="Migrating from WCF 2.1" data-md-level="2">
1790 <label class="md-nav__title" for="__nav_6_5">
1791 <span class="md-nav__icon md-icon"></span>
1792 Migrating from WCF 2.1
1793 </label>
1794 <ul class="md-nav__list" data-md-scrollfix>
1795
1796
1797
1798
1799
1800 <li class="md-nav__item">
1801 <a href="../../migration/wcf21/php/" class="md-nav__link">
1802 PHP API
1803 </a>
1804 </li>
1805
1806
1807
1808
1809
1810
1811
1812 <li class="md-nav__item">
1813 <a href="../../migration/wcf21/templates/" class="md-nav__link">
1814 Templates
1815 </a>
1816 </li>
1817
1818
1819
1820
1821
1822
1823
1824 <li class="md-nav__item">
1825 <a href="../../migration/wcf21/css/" class="md-nav__link">
1826 CSS
1827 </a>
1828 </li>
1829
1830
1831
1832
1833
1834
1835
1836 <li class="md-nav__item">
1837 <a href="../../migration/wcf21/package/" class="md-nav__link">
1838 Package Components
1839 </a>
1840 </li>
1841
1842
1843
1844 </ul>
1845 </nav>
1846 </li>
1847
1848
1849
1850 </ul>
1851 </nav>
1852 </li>
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864 <li class="md-nav__item md-nav__item--nested">
1865
1866
1867 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
1868
1869 <label class="md-nav__link" for="__nav_7">
1870 Tutorials
1871 <span class="md-nav__icon md-icon"></span>
1872 </label>
1873 <nav class="md-nav" aria-label="Tutorials" data-md-level="1">
1874 <label class="md-nav__title" for="__nav_7">
1875 <span class="md-nav__icon md-icon"></span>
1876 Tutorials
1877 </label>
1878 <ul class="md-nav__list" data-md-scrollfix>
1879
1880
1881
1882
1883
1884
1885 <li class="md-nav__item md-nav__item--nested">
1886
1887
1888 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" >
1889
1890 <label class="md-nav__link" for="__nav_7_1">
1891 Tutorial Series
1892 <span class="md-nav__icon md-icon"></span>
1893 </label>
1894 <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2">
1895 <label class="md-nav__title" for="__nav_7_1">
1896 <span class="md-nav__icon md-icon"></span>
1897 Tutorial Series
1898 </label>
1899 <ul class="md-nav__list" data-md-scrollfix>
1900
1901
1902
1903
1904
1905 <li class="md-nav__item">
1906 <a href="../../tutorial/series/overview/" class="md-nav__link">
1907 Overview
1908 </a>
1909 </li>
1910
1911
1912
1913
1914
1915
1916
1917 <li class="md-nav__item">
1918 <a href="../../tutorial/series/part_1/" class="md-nav__link">
1919 Part 1
1920 </a>
1921 </li>
1922
1923
1924
1925
1926
1927
1928
1929 <li class="md-nav__item">
1930 <a href="../../tutorial/series/part_2/" class="md-nav__link">
1931 Part 2
1932 </a>
1933 </li>
1934
1935
1936
1937
1938
1939
1940
1941 <li class="md-nav__item">
1942 <a href="../../tutorial/series/part_3/" class="md-nav__link">
1943 Part 3
1944 </a>
1945 </li>
1946
1947
1948
1949 </ul>
1950 </nav>
1951 </li>
1952
1953
1954
1955 </ul>
1956 </nav>
1957 </li>
1958
1959
1960
1961 </ul>
1962 </nav>
1963 </div>
1964 </div>
1965 </div>
1966
1967
1968
1969 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1970 <div class="md-sidebar__scrollwrap">
1971 <div class="md-sidebar__inner">
1972
1973 <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1974
1975
1976
1977
1978
1979 <label class="md-nav__title" for="__toc">
1980 <span class="md-nav__icon md-icon"></span>
1981 Table of contents
1982 </label>
1983 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1984
1985 <li class="md-nav__item">
1986 <a href="#general-code-style" class="md-nav__link">
1987 General Code Style
1988 </a>
1989
1990 <nav class="md-nav" aria-label="General Code Style">
1991 <ul class="md-nav__list">
1992
1993 <li class="md-nav__item">
1994 <a href="#naming-conventions" class="md-nav__link">
1995 Naming conventions
1996 </a>
1997
1998 </li>
1999
2000 <li class="md-nav__item">
2001 <a href="#arrays" class="md-nav__link">
2002 Arrays
2003 </a>
2004
2005 </li>
2006
2007 <li class="md-nav__item">
2008 <a href="#ternary-operator" class="md-nav__link">
2009 Ternary Operator
2010 </a>
2011
2012 </li>
2013
2014 <li class="md-nav__item">
2015 <a href="#whitespaces" class="md-nav__link">
2016 Whitespaces
2017 </a>
2018
2019 </li>
2020
2021 </ul>
2022 </nav>
2023
2024 </li>
2025
2026 <li class="md-nav__item">
2027 <a href="#classes" class="md-nav__link">
2028 Classes
2029 </a>
2030
2031 <nav class="md-nav" aria-label="Classes">
2032 <ul class="md-nav__list">
2033
2034 <li class="md-nav__item">
2035 <a href="#referencing-class-names" class="md-nav__link">
2036 Referencing Class Names
2037 </a>
2038
2039 </li>
2040
2041 <li class="md-nav__item">
2042 <a href="#static-getters-of-databaseobject-classes" class="md-nav__link">
2043 Static Getters (of DatabaseObject Classes)
2044 </a>
2045
2046 </li>
2047
2048 <li class="md-nav__item">
2049 <a href="#long-method-calls" class="md-nav__link">
2050 Long method calls
2051 </a>
2052
2053 </li>
2054
2055 </ul>
2056 </nav>
2057
2058 </li>
2059
2060 </ul>
2061
2062 </nav>
2063 </div>
2064 </div>
2065 </div>
2066
2067
2068 <div class="md-content" data-md-component="content">
2069 <article class="md-content__inner md-typeset">
2070
2071
2072 <a href="https://github.com/WoltLab/docs.woltlab.com/edit/5.4/docs/php/code-style.md" title="Edit this page" class="md-content__button md-icon">
2073 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
2074 </a>
2075
2076
2077 <h1 id="code-style">Code Style<a class="headerlink" href="#code-style" title="Permanent link">#</a></h1>
2078 <div class="admonition info">
2079 <p class="admonition-title">The following code style conventions are used by us for our own packages. While you do not have to follow every rule, you are encouraged to do so.</p>
2080 </div>
2081 <p>For information about how to document your code, please refer to the <a href="../code-style-documentation/">documentation page</a>.</p>
2082 <h2 id="general-code-style">General Code Style<a class="headerlink" href="#general-code-style" title="Permanent link">#</a></h2>
2083 <h3 id="naming-conventions">Naming conventions<a class="headerlink" href="#naming-conventions" title="Permanent link">#</a></h3>
2084 <p>The relevant naming conventions are:</p>
2085 <ul>
2086 <li><strong>Upper camel case</strong>:
2087 The first letters of all compound words are written in upper case.</li>
2088 <li><strong>Lower camel case</strong>:
2089 The first letters of compound words are written in upper case, except for the first letter which is written in lower case.</li>
2090 <li><strong>Screaming snake case</strong>:
2091 All letters are written in upper case and compound words are separated by underscores.</li>
2092 </ul>
2093 <table>
2094 <thead>
2095 <tr>
2096 <th>Type</th>
2097 <th>Convention</th>
2098 <th>Example</th>
2099 </tr>
2100 </thead>
2101 <tbody>
2102 <tr>
2103 <td>Variable</td>
2104 <td>lower camel case</td>
2105 <td><code>$variableName</code></td>
2106 </tr>
2107 <tr>
2108 <td>Class</td>
2109 <td>upper camel case</td>
2110 <td><code>class UserGroupEditor</code></td>
2111 </tr>
2112 <tr>
2113 <td>Properties</td>
2114 <td>lower camel case</td>
2115 <td><code>public $propertyName</code></td>
2116 </tr>
2117 <tr>
2118 <td>Method</td>
2119 <td>lower camel case</td>
2120 <td><code>public function getObjectByName()</code></td>
2121 </tr>
2122 <tr>
2123 <td>Constant</td>
2124 <td>screaming snake case</td>
2125 <td><code>MODULE_USER_THING</code></td>
2126 </tr>
2127 </tbody>
2128 </table>
2129 <h3 id="arrays">Arrays<a class="headerlink" href="#arrays" title="Permanent link">#</a></h3>
2130 <p>For arrays, use the short array syntax introduced with PHP 5.4.
2131 The following example illustrates the different cases that can occur when working with arrays and how to format them:</p>
2132 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2133
2134 <span class="nv">$empty</span> <span class="o">=</span> <span class="p">[];</span>
2135
2136 <span class="nv">$oneElement</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">];</span>
2137 <span class="nv">$multipleElements</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">];</span>
2138
2139 <span class="nv">$oneElementWithKey</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;firstElement&#39;</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">];</span>
2140 <span class="nv">$multipleElementsWithKey</span> <span class="o">=</span> <span class="p">[</span>
2141 <span class="s1">&#39;firstElement&#39;</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span>
2142 <span class="s1">&#39;secondElement&#39;</span> <span class="o">=&gt;</span> <span class="mi">2</span><span class="p">,</span>
2143 <span class="s1">&#39;thirdElement&#39;</span> <span class="o">=&gt;</span> <span class="mi">3</span>
2144 <span class="p">];</span>
2145 </code></pre></div>
2146 <h3 id="ternary-operator">Ternary Operator<a class="headerlink" href="#ternary-operator" title="Permanent link">#</a></h3>
2147 <p>The ternary operator can be used for short conditioned assignments:</p>
2148 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2149
2150 <span class="nv">$name</span> <span class="o">=</span> <span class="nb">isset</span><span class="p">(</span><span class="nv">$tagArgs</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">])</span> <span class="o">?</span> <span class="nv">$tagArgs</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span> <span class="o">:</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span>
2151 </code></pre></div>
2152 <p>The condition and the values should be short so that the code does not result in a very long line which thus decreases the readability compared to an <code>if-else</code> statement.</p>
2153 <p>Parentheses may only be used around the condition and not around the whole statement:</p>
2154 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2155
2156 <span class="c1">// do not do it like this</span>
2157 <span class="nv">$name</span> <span class="o">=</span> <span class="p">(</span><span class="nb">isset</span><span class="p">(</span><span class="nv">$tagArgs</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">])</span> <span class="o">?</span> <span class="nv">$tagArgs</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span> <span class="o">:</span> <span class="s1">&#39;default&#39;</span><span class="p">);</span>
2158 </code></pre></div>
2159 <p>Parentheses around the conditions may not be used to wrap simple function calls:</p>
2160 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2161
2162 <span class="c1">// do not do it like this</span>
2163 <span class="nv">$name</span> <span class="o">=</span> <span class="p">(</span><span class="nb">isset</span><span class="p">(</span><span class="nv">$tagArgs</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]))</span> <span class="o">?</span> <span class="nv">$tagArgs</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span> <span class="o">:</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span>
2164 </code></pre></div>
2165 <p>but have to be used for comparisons or other binary operators:</p>
2166 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2167
2168 <span class="nv">$value</span> <span class="o">=</span> <span class="p">(</span><span class="nv">$otherValue</span> <span class="o">&gt;</span> <span class="nv">$upperLimit</span><span class="p">)</span> <span class="o">?</span> <span class="nv">$additionalValue</span> <span class="o">:</span> <span class="nv">$otherValue</span><span class="p">;</span>
2169 </code></pre></div>
2170 <p>If you need to use more than one binary operator, use an <code>if-else</code> statement.</p>
2171 <p>The same rules apply to assigning array values:</p>
2172 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2173
2174 <span class="nv">$values</span> <span class="o">=</span> <span class="p">[</span>
2175 <span class="s1">&#39;first&#39;</span> <span class="o">=&gt;</span> <span class="nv">$firstValue</span><span class="p">,</span>
2176 <span class="s1">&#39;second&#39;</span> <span class="o">=&gt;</span> <span class="nv">$secondToggle</span> <span class="o">?</span> <span class="nv">$secondValueA</span> <span class="o">:</span> <span class="nv">$secondValueB</span><span class="p">,</span>
2177 <span class="s1">&#39;third&#39;</span> <span class="o">=&gt;</span> <span class="p">(</span><span class="nv">$thirdToogle</span> <span class="o">&gt;</span> <span class="mi">13</span><span class="p">)</span> <span class="o">?</span> <span class="nv">$thirdToogleA</span> <span class="o">:</span> <span class="nv">$thirdToogleB</span>
2178 <span class="p">];</span>
2179 </code></pre></div>
2180 <p>or return values:</p>
2181 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2182
2183 <span class="k">return</span> <span class="nb">isset</span><span class="p">(</span><span class="nv">$tagArgs</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">])</span> <span class="o">?</span> <span class="nv">$tagArgs</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span> <span class="o">:</span> <span class="s1">&#39;default&#39;</span><span class="p">;</span>
2184 </code></pre></div>
2185 <h3 id="whitespaces">Whitespaces<a class="headerlink" href="#whitespaces" title="Permanent link">#</a></h3>
2186 <p>You have to put a whitespace <em>in front</em> of the following things:</p>
2187 <ul>
2188 <li>equal sign in assignments: <code>$x = 1;</code></li>
2189 <li>comparison operators: <code>$x == 1</code></li>
2190 <li>opening bracket of a block <code>public function test() {</code></li>
2191 </ul>
2192 <p>You have to put a whitespace <em>behind</em> the following things:</p>
2193 <ul>
2194 <li>equal sign in assignments: <code>$x = 1;</code></li>
2195 <li>comparison operators: <code>$x == 1</code></li>
2196 <li>comma in a function/method parameter list if the comma is not followed by a line break: <code>public function test($a, $b) {</code></li>
2197 <li><code>if</code>, <code>for</code>, <code>foreach</code>, <code>while</code>: <code>if ($x == 1)</code></li>
2198 </ul>
2199 <h2 id="classes">Classes<a class="headerlink" href="#classes" title="Permanent link">#</a></h2>
2200 <h3 id="referencing-class-names">Referencing Class Names<a class="headerlink" href="#referencing-class-names" title="Permanent link">#</a></h3>
2201 <p>If you have to reference a class name inside a php file, you have to use the <code>class</code> keyword.</p>
2202 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2203
2204 <span class="c1">// not like this</span>
2205 <span class="nv">$className</span> <span class="o">=</span> <span class="s1">&#39;wcf\data\example\Example&#39;</span><span class="p">;</span>
2206
2207 <span class="c1">// like this</span>
2208 <span class="k">use</span> <span class="nx">wcf\data\example\Example</span><span class="p">;</span>
2209 <span class="nv">$className</span> <span class="o">=</span> <span class="nx">Example</span><span class="o">::</span><span class="na">class</span><span class="p">;</span>
2210 </code></pre></div>
2211 <h3 id="static-getters-of-databaseobject-classes">Static Getters (of <code>DatabaseObject</code> Classes)<a class="headerlink" href="#static-getters-of-databaseobject-classes" title="Permanent link">#</a></h3>
2212 <p>Some database objects provide static getters, either if they are decorators or for a unique combination of database table columns, like <code>wcf\data\box\Box::getBoxByIdentifier()</code>:</p>
2213 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2214 <span class="k">namespace</span> <span class="nx">wcf\data\box</span><span class="p">;</span>
2215 <span class="k">use</span> <span class="nx">wcf\data\DatabaseObject</span><span class="p">;</span>
2216 <span class="k">use</span> <span class="nx">wcf\system\WCF</span><span class="p">;</span>
2217
2218 <span class="k">class</span> <span class="nc">Box</span> <span class="k">extends</span> <span class="nx">DatabaseObject</span> <span class="p">{</span>
2219 <span class="sd">/**</span>
2220 <span class="sd"> * Returns the box with the given identifier.</span>
2221 <span class="sd"> *</span>
2222 <span class="sd"> * @param string $identifier</span>
2223 <span class="sd"> * @return Box|null</span>
2224 <span class="sd"> */</span>
2225 <span class="k">public</span> <span class="k">static</span> <span class="k">function</span> <span class="nf">getBoxByIdentifier</span><span class="p">(</span><span class="nv">$identifier</span><span class="p">)</span> <span class="p">{</span>
2226 <span class="nv">$sql</span> <span class="o">=</span> <span class="s2">&quot;SELECT *</span>
2227 <span class="s2"> FROM wcf&quot;</span><span class="o">.</span><span class="nx">WCF_N</span><span class="o">.</span><span class="s2">&quot;_box</span>
2228 <span class="s2"> WHERE identifier = ?&quot;</span><span class="p">;</span>
2229 <span class="nv">$statement</span> <span class="o">=</span> <span class="nx">WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">prepareStatement</span><span class="p">(</span><span class="nv">$sql</span><span class="p">);</span>
2230 <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">([</span><span class="nv">$identifier</span><span class="p">]);</span>
2231
2232 <span class="k">return</span> <span class="nv">$statement</span><span class="o">-&gt;</span><span class="na">fetchObject</span><span class="p">(</span><span class="nx">self</span><span class="o">::</span><span class="na">class</span><span class="p">);</span>
2233 <span class="p">}</span>
2234 <span class="p">}</span>
2235 </code></pre></div>
2236 <p>Such methods should always either return the desired object or <code>null</code> if the object does not exist.
2237 <code>wcf\system\database\statement\PreparedStatement::fetchObject()</code> already takes care of this distinction so that its return value can simply be returned by such methods.</p>
2238 <p>The name of such getters should generally follow the convention <code>get{object type}By{column or other description}</code>.</p>
2239 <h3 id="long-method-calls">Long method calls<a class="headerlink" href="#long-method-calls" title="Permanent link">#</a></h3>
2240 <p>In some instances, methods with many argument have to be called which can result in lines of code like this one:</p>
2241 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2242
2243 <span class="nx">\wcf\system\search\SearchIndexManager</span><span class="o">::</span><span class="na">getInstance</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">set</span><span class="p">(</span><span class="s1">&#39;com.woltlab.wcf.article&#39;</span><span class="p">,</span> <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">articleContentID</span><span class="p">,</span> <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">content</span><span class="p">,</span> <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">title</span><span class="p">,</span> <span class="nv">$articles</span><span class="p">[</span><span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">articleID</span><span class="p">]</span><span class="o">-&gt;</span><span class="na">time</span><span class="p">,</span> <span class="nv">$articles</span><span class="p">[</span><span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">articleID</span><span class="p">]</span><span class="o">-&gt;</span><span class="na">userID</span><span class="p">,</span> <span class="nv">$articles</span><span class="p">[</span><span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">articleID</span><span class="p">]</span><span class="o">-&gt;</span><span class="na">username</span><span class="p">,</span> <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">languageID</span><span class="p">,</span> <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">teaser</span><span class="p">);</span>
2244 </code></pre></div>
2245 <p>which is hardly readable.
2246 Therefore, the line must be split into multiple lines with each argument in a separate line:</p>
2247 <div class="highlight"><pre><span></span><code><span class="o">&lt;?</span><span class="nx">php</span>
2248
2249 <span class="nx">\wcf\system\search\SearchIndexManager</span><span class="o">::</span><span class="na">getInstance</span><span class="p">()</span><span class="o">-&gt;</span><span class="na">set</span><span class="p">(</span>
2250 <span class="s1">&#39;com.woltlab.wcf.article&#39;</span><span class="p">,</span>
2251 <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">articleContentID</span><span class="p">,</span>
2252 <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">content</span><span class="p">,</span>
2253 <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">title</span><span class="p">,</span>
2254 <span class="nv">$articles</span><span class="p">[</span><span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">articleID</span><span class="p">]</span><span class="o">-&gt;</span><span class="na">time</span><span class="p">,</span>
2255 <span class="nv">$articles</span><span class="p">[</span><span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">articleID</span><span class="p">]</span><span class="o">-&gt;</span><span class="na">userID</span><span class="p">,</span>
2256 <span class="nv">$articles</span><span class="p">[</span><span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">articleID</span><span class="p">]</span><span class="o">-&gt;</span><span class="na">username</span><span class="p">,</span>
2257 <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">languageID</span><span class="p">,</span>
2258 <span class="nv">$articleContent</span><span class="o">-&gt;</span><span class="na">teaser</span>
2259 <span class="p">);</span>
2260 </code></pre></div>
2261 <p>In general, this rule applies to the following methods:</p>
2262 <ul>
2263 <li><code>wcf\system\edit\EditHistoryManager::add()</code></li>
2264 <li><code>wcf\system\message\quote\MessageQuoteManager::addQuote()</code></li>
2265 <li><code>wcf\system\message\quote\MessageQuoteManager::getQuoteID()</code></li>
2266 <li><code>wcf\system\search\SearchIndexManager::set()</code></li>
2267 <li><code>wcf\system\user\object\watch\UserObjectWatchHandler::updateObject()</code></li>
2268 <li><code>wcf\system\user\notification\UserNotificationHandler::fireEvent()</code></li>
2269 </ul>
2270
2271
2272
2273
2274 <hr>
2275 <div class="md-source-date">
2276 <small>
2277
2278 Last update: 2021-01-08
2279
2280 </small>
2281 </div>
2282
2283
2284
2285
2286
2287
2288
2289
2290 </article>
2291 </div>
2292 </div>
2293
2294 </main>
2295
2296
2297 <footer class="md-footer">
2298
2299 <nav class="md-footer__inner md-grid" aria-label="Footer">
2300
2301 <a href="../api/sitemaps/" class="md-footer__link md-footer__link--prev" rel="prev">
2302 <div class="md-footer__button md-icon">
2303 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
2304 </div>
2305 <div class="md-footer__title">
2306 <div class="md-ellipsis">
2307 <span class="md-footer__direction">
2308 Previous
2309 </span>
2310 Sitemaps
2311 </div>
2312 </div>
2313 </a>
2314
2315
2316 <a href="../apps/" class="md-footer__link md-footer__link--next" rel="next">
2317 <div class="md-footer__title">
2318 <div class="md-ellipsis">
2319 <span class="md-footer__direction">
2320 Next
2321 </span>
2322 Apps
2323 </div>
2324 </div>
2325 <div class="md-footer__button md-icon">
2326 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
2327 </div>
2328 </a>
2329
2330 </nav>
2331
2332 <div class="md-footer-meta md-typeset">
2333 <div class="md-footer-meta__inner md-grid">
2334 <div class="md-footer-copyright">
2335
2336 <div class="md-footer-copyright__highlight">
2337 Copyright © 2020 WoltLab GmbH
2338 </div>
2339
2340 Made with
2341 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2342 Material for MkDocs
2343 </a>
2344
2345 </div>
2346 <div class="md-footer-copyright">
2347 <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a>
2348 <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a>
2349 </div>
2350 </div>
2351 </div>
2352 </footer>
2353
2354 </div>
2355 <div class="md-dialog" data-md-component="dialog">
2356 <div class="md-dialog__inner md-typeset"></div>
2357 </div>
2358 <script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.fe42c31b.min.js", "version": {"provider": "mike"}}</script>
2359
2360
2361 <script src="../../assets/javascripts/bundle.d892486b.min.js"></script>
2362
2363
2364 </body>
2365 </html>