NoPhp4ConstructorFixerTest.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of PHP CS Fixer.
  5. *
  6. * (c) Fabien Potencier <fabien@symfony.com>
  7. * Dariusz Rumiński <dariusz.ruminski@gmail.com>
  8. *
  9. * This source file is subject to the MIT license that is bundled
  10. * with this source code in the file LICENSE.
  11. */
  12. namespace PhpCsFixer\Tests\Fixer\ClassNotation;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @author Matteo Beccati <matteo@beccati.com>
  16. *
  17. * @internal
  18. *
  19. * @covers \PhpCsFixer\Fixer\ClassNotation\NoPhp4ConstructorFixer
  20. */
  21. final class NoPhp4ConstructorFixerTest extends AbstractFixerTestCase
  22. {
  23. /**
  24. * @dataProvider provideFixCases
  25. */
  26. public function testFix(string $expected, ?string $input = null): void
  27. {
  28. $this->doTest($expected, $input);
  29. }
  30. public static function provideFixCases(): iterable
  31. {
  32. yield [
  33. '<?php $a = new class {};',
  34. ];
  35. yield [
  36. '<?php $a = new class {}?>',
  37. ];
  38. yield [
  39. '<?php
  40. $a = new Foo() <=> 1;
  41. $a = new Foo <=> 1;
  42. $a = new class() {};
  43. $a = new class() implements Foo{};
  44. $a = new class() /**/ extends Bar1{};
  45. $a = new class() extends Bar2 implements Foo{};
  46. $a = new class() extends Bar3 implements Foo, Foo2{};
  47. $a = new class() {};
  48. $a = new class {};
  49. $a = new class implements Foo{};
  50. $a = new class /**/ extends Bar1{};
  51. $a = new class extends Bar2 implements Foo{};
  52. $a = new class extends Bar3 implements Foo, Foo2{};
  53. $a = new class {}?>
  54. ',
  55. ];
  56. }
  57. /**
  58. * @dataProvider provideSimpleClassCases
  59. */
  60. public function testSimpleClass(string $expected, ?string $input = null): void
  61. {
  62. $this->doTest($expected, $input);
  63. }
  64. public static function provideSimpleClassCases(): iterable
  65. {
  66. yield [
  67. <<<'EOF'
  68. <?php
  69. class Foo
  70. {
  71. public function __construct($bar)
  72. {
  73. var_dump(1);
  74. }
  75. }
  76. EOF
  77. ,
  78. <<<'EOF'
  79. <?php
  80. class Foo
  81. {
  82. public function Foo($bar)
  83. {
  84. var_dump(1);
  85. }
  86. }
  87. EOF
  88. ];
  89. yield [
  90. <<<'EOF'
  91. <?php
  92. class Foo
  93. {
  94. public#
  95. function#
  96. __construct#
  97. (#
  98. $bar#
  99. )#
  100. {}
  101. }
  102. EOF
  103. ,
  104. <<<'EOF'
  105. <?php
  106. class Foo
  107. {
  108. public#
  109. function#
  110. Foo#
  111. (#
  112. $bar#
  113. )#
  114. {}
  115. }
  116. EOF
  117. ];
  118. }
  119. public function testNamespaces(): void
  120. {
  121. $expected = <<<'EOF'
  122. <?php
  123. namespace Baz\Qux;
  124. class Foo
  125. {
  126. public function __construct($bar)
  127. {
  128. var_dump(1);
  129. }
  130. public function Foo($bar)
  131. {
  132. var_dump(2);
  133. }
  134. }
  135. EOF;
  136. $this->doTest($expected);
  137. }
  138. public function testNamespaces2(): void
  139. {
  140. $expected = <<<'EOF'
  141. <?php
  142. namespace Baz\Qux
  143. {
  144. class Foo
  145. {
  146. public function __construct($bar)
  147. {
  148. var_dump(1);
  149. }
  150. public function Foo($bar)
  151. {
  152. var_dump(2);
  153. }
  154. }
  155. class Bar
  156. {
  157. public function Bar()
  158. {
  159. var_dump(3);
  160. }
  161. }
  162. }
  163. EOF;
  164. $this->doTest($expected);
  165. }
  166. public function testNamespaceGlobal(): void
  167. {
  168. $expected = <<<'EOF'
  169. <?php
  170. namespace {
  171. class Foo
  172. {
  173. function __construct($bar)
  174. {
  175. var_dump(1);
  176. }
  177. }
  178. }
  179. EOF;
  180. $input = <<<'EOF'
  181. <?php
  182. namespace {
  183. class Foo
  184. {
  185. function Foo($bar)
  186. {
  187. var_dump(1);
  188. }
  189. }
  190. }
  191. EOF;
  192. $this->doTest($expected, $input);
  193. }
  194. public function testPhp5Only(): void
  195. {
  196. $expected = <<<'EOF'
  197. <?php
  198. class Foo
  199. {
  200. function __construct($bar)
  201. {
  202. var_dump(1);
  203. }
  204. function bar()
  205. {
  206. var_dump(3);
  207. }
  208. }
  209. EOF;
  210. $this->doTest($expected);
  211. }
  212. public function testPhp4Only(): void
  213. {
  214. $expected = <<<'EOF'
  215. <?php
  216. class Foo
  217. {
  218. /**
  219. * Constructor
  220. */
  221. function __construct($bar)
  222. {
  223. var_dump(1);
  224. }
  225. function bar()
  226. {
  227. var_dump(3);
  228. }
  229. }
  230. EOF;
  231. $input = <<<'EOF'
  232. <?php
  233. class Foo
  234. {
  235. /**
  236. * Constructor
  237. */
  238. function foO($bar)
  239. {
  240. var_dump(1);
  241. }
  242. function bar()
  243. {
  244. var_dump(3);
  245. }
  246. }
  247. EOF;
  248. $this->doTest($expected, $input);
  249. }
  250. public function testBothTheRightWay1(): void
  251. {
  252. $expected = <<<'EOF'
  253. <?php
  254. class Foo
  255. {
  256. /**
  257. * Constructor
  258. */
  259. public function __construct()
  260. {
  261. var_dump(1);
  262. }
  263. public function bar()
  264. {
  265. var_dump(3);
  266. }
  267. }
  268. EOF;
  269. $input = <<<'EOF'
  270. <?php
  271. class Foo
  272. {
  273. /**
  274. * Constructor
  275. */
  276. public function __construct()
  277. {
  278. var_dump(1);
  279. }
  280. /**
  281. * PHP-4 Constructor
  282. */
  283. function Foo()
  284. {
  285. // Call PHP5!
  286. $this->__construct();
  287. }
  288. public function bar()
  289. {
  290. var_dump(3);
  291. }
  292. }
  293. EOF;
  294. $this->doTest($expected, $input);
  295. }
  296. public function testBothTheRightWay2(): void
  297. {
  298. $expected = <<<'EOF'
  299. <?php
  300. class Foo
  301. {
  302. /**
  303. * Constructor
  304. */
  305. public function __construct($bar)
  306. {
  307. var_dump(1);
  308. }
  309. public function bar()
  310. {
  311. var_dump(3);
  312. }
  313. }
  314. EOF;
  315. $input = <<<'EOF'
  316. <?php
  317. class Foo
  318. {
  319. /**
  320. * Constructor
  321. */
  322. public function __construct($bar)
  323. {
  324. var_dump(1);
  325. }
  326. /**
  327. * PHP-4 Constructor
  328. */
  329. function Foo($bar)
  330. {
  331. // Call PHP5!
  332. $this->__construct($bar);
  333. }
  334. public function bar()
  335. {
  336. var_dump(3);
  337. }
  338. }
  339. EOF;
  340. $this->doTest($expected, $input);
  341. }
  342. public function testBothTheRightWay3(): void
  343. {
  344. $expected = <<<'EOF'
  345. <?php
  346. class Foo
  347. {
  348. /**
  349. * Constructor
  350. */
  351. public function __construct($bar = 1, $baz = null)
  352. {
  353. var_dump(1);
  354. }
  355. public function bar()
  356. {
  357. var_dump(3);
  358. }
  359. }
  360. EOF;
  361. $input = <<<'EOF'
  362. <?php
  363. class Foo
  364. {
  365. /**
  366. * Constructor
  367. */
  368. public function __construct($bar = 1, $baz = null)
  369. {
  370. var_dump(1);
  371. }
  372. /**
  373. * PHP-4 Constructor
  374. */
  375. function Foo($bar = 1, $baz = null)
  376. {
  377. // Call PHP5!
  378. $this->__construct($bar, $baz);
  379. }
  380. public function bar()
  381. {
  382. var_dump(3);
  383. }
  384. }
  385. EOF;
  386. $this->doTest($expected, $input);
  387. }
  388. public function testBothTheOtherWayAround(): void
  389. {
  390. $expected = <<<'EOF'
  391. <?php
  392. class Foo
  393. {
  394. /**
  395. * PHP-4 Constructor.
  396. *
  397. * This is the real constructor. It's the one that most likely contains any meaningful info in the docblock.
  398. */
  399. private function __construct($bar)
  400. {
  401. var_dump(1);
  402. }
  403. function bar()
  404. {
  405. var_dump(3);
  406. }
  407. }
  408. EOF;
  409. $input = <<<'EOF'
  410. <?php
  411. class Foo
  412. {
  413. /**
  414. * PHP-5 Constructor.
  415. *
  416. * This docblock is removed, along with the entire wrapper method.
  417. */
  418. protected function __construct($bar)
  419. {
  420. // Call The Real Constructor, not the hippy fake one!
  421. $this->Foo($bar);
  422. }
  423. /**
  424. * PHP-4 Constructor.
  425. *
  426. * This is the real constructor. It's the one that most likely contains any meaningful info in the docblock.
  427. */
  428. private function Foo($bar)
  429. {
  430. var_dump(1);
  431. }
  432. function bar()
  433. {
  434. var_dump(3);
  435. }
  436. }
  437. EOF;
  438. $this->doTest($expected, $input);
  439. }
  440. public function testPhp4Parent(): void
  441. {
  442. $expected = <<<'EOF'
  443. <?php
  444. class Foo extends FooParEnt
  445. {
  446. /**
  447. * Constructor
  448. */
  449. function __construct($bar)
  450. {
  451. parent::__construct(1);
  452. var_dump(9);
  453. }
  454. function bar()
  455. {
  456. var_dump(3);
  457. }
  458. }
  459. EOF;
  460. $input = <<<'EOF'
  461. <?php
  462. class Foo extends FooParEnt
  463. {
  464. /**
  465. * Constructor
  466. */
  467. function Foo($bar)
  468. {
  469. parent::FooPaRent(1);
  470. var_dump(9);
  471. }
  472. function bar()
  473. {
  474. var_dump(3);
  475. }
  476. }
  477. EOF;
  478. $this->doTest($expected, $input);
  479. }
  480. public function testPhp4ParentInit(): void
  481. {
  482. $expected = <<<'EOF'
  483. <?php
  484. class Foo extends FooParent
  485. {
  486. /**
  487. * Constructor
  488. */
  489. function __construct($bar)
  490. {
  491. parent::init(1);
  492. var_dump(9);
  493. }
  494. function bar()
  495. {
  496. var_dump(3);
  497. }
  498. }
  499. EOF;
  500. $input = <<<'EOF'
  501. <?php
  502. class Foo extends FooParent
  503. {
  504. /**
  505. * Constructor
  506. */
  507. function Foo($bar)
  508. {
  509. parent::init(1);
  510. var_dump(9);
  511. }
  512. function bar()
  513. {
  514. var_dump(3);
  515. }
  516. }
  517. EOF;
  518. $this->doTest($expected, $input);
  519. }
  520. public function testMixedParent(): void
  521. {
  522. $expected = <<<'EOF'
  523. <?php
  524. class Foo extends FooParent
  525. {
  526. /**
  527. * Constructor
  528. */
  529. function __construcT($bar)
  530. {
  531. parent::__construct(1);
  532. var_dump(9);
  533. }
  534. function bar()
  535. {
  536. var_dump(3);
  537. }
  538. }
  539. EOF;
  540. $input = <<<'EOF'
  541. <?php
  542. class Foo extends FooParent
  543. {
  544. /**
  545. * Constructor
  546. */
  547. function __construcT($bar)
  548. {
  549. parent::FooParenT(1);
  550. var_dump(9);
  551. }
  552. function bar()
  553. {
  554. var_dump(3);
  555. }
  556. }
  557. EOF;
  558. $this->doTest($expected, $input);
  559. }
  560. public function testMixedParent2(): void
  561. {
  562. $expected = <<<'EOF'
  563. <?php
  564. class Foo extends FooParent
  565. {
  566. /**
  567. * Constructor
  568. */
  569. function __construcT($bar)
  570. {
  571. parent::__construct(1);
  572. var_dump(9);
  573. }
  574. function bar()
  575. {
  576. var_dump(3);
  577. }
  578. }
  579. EOF;
  580. $input = <<<'EOF'
  581. <?php
  582. class Foo extends FooParent
  583. {
  584. /**
  585. * Constructor
  586. */
  587. function __construcT($bar)
  588. {
  589. $this->FooParenT(1);
  590. var_dump(9);
  591. }
  592. function bar()
  593. {
  594. var_dump(3);
  595. }
  596. }
  597. EOF;
  598. $this->doTest($expected, $input);
  599. }
  600. public function testParentOther(): void
  601. {
  602. $expected = <<<'EOF'
  603. <?php
  604. class Foo extends FooParent
  605. {
  606. /**
  607. * Constructor
  608. */
  609. function __construct($bar)
  610. {
  611. parent::__construct(1);
  612. var_dump(9);
  613. }
  614. function bar()
  615. {
  616. var_dump(3);
  617. }
  618. }
  619. EOF;
  620. $input = <<<'EOF'
  621. <?php
  622. class Foo extends FooParent
  623. {
  624. /**
  625. * Constructor
  626. */
  627. function Foo($bar)
  628. {
  629. $this->FooParent(1);
  630. var_dump(9);
  631. }
  632. function bar()
  633. {
  634. var_dump(3);
  635. }
  636. }
  637. EOF;
  638. $this->doTest($expected, $input);
  639. }
  640. public function testParentOther2(): void
  641. {
  642. $expected = <<<'EOF'
  643. <?php
  644. class Foo extends FooParent
  645. {
  646. /**
  647. * Constructor
  648. */
  649. function __construct($bar)
  650. {
  651. parent::__construct(1);
  652. var_dump(9);
  653. }
  654. function bar()
  655. {
  656. var_dump(3);
  657. }
  658. }
  659. EOF;
  660. $input = <<<'EOF'
  661. <?php
  662. class Foo extends FooParent
  663. {
  664. /**
  665. * Constructor
  666. */
  667. function Foo($bar)
  668. {
  669. FooParent::FooParent(1);
  670. var_dump(9);
  671. }
  672. function bar()
  673. {
  674. var_dump(3);
  675. }
  676. }
  677. EOF;
  678. $this->doTest($expected, $input);
  679. }
  680. public function testClassWithAnonymous(): void
  681. {
  682. $expected = <<<'EOF'
  683. <?php
  684. class Foo {
  685. private $bar;
  686. public function __construct()
  687. {
  688. $this->bar = function () {};
  689. }
  690. }
  691. EOF;
  692. $input = <<<'EOF'
  693. <?php
  694. class Foo {
  695. private $bar;
  696. public function Foo()
  697. {
  698. $this->bar = function () {};
  699. }
  700. }
  701. EOF;
  702. $this->doTest($expected, $input);
  703. }
  704. public function testClassWithComments(): void
  705. {
  706. $expected = <<<'EOF'
  707. <?php
  708. class /* test */
  709. // another
  710. Foo {
  711. public function /* test */ __construct($param) {
  712. }
  713. }
  714. EOF;
  715. $input = <<<'EOF'
  716. <?php
  717. class /* test */
  718. // another
  719. Foo {
  720. public function /* test */ Foo($param) {
  721. }
  722. }
  723. EOF;
  724. $this->doTest($expected, $input);
  725. }
  726. public function testAlphaBeta(): void
  727. {
  728. $expected = <<<'EOF'
  729. <?php
  730. class Foo
  731. {
  732. public function Foo()
  733. {
  734. echo 'alpha';
  735. }
  736. public function __construct()
  737. {
  738. echo 'beta';
  739. }
  740. }
  741. EOF;
  742. $this->doTest($expected);
  743. }
  744. public function testAlphaBetaTrick1(): void
  745. {
  746. $expected = <<<'EOF'
  747. <?php
  748. class Foo
  749. {
  750. public function Foo()
  751. {
  752. // This is not $this->__construct()
  753. echo 'alpha';
  754. }
  755. public function __construct()
  756. {
  757. echo 'beta';
  758. }
  759. }
  760. EOF;
  761. $this->doTest($expected);
  762. }
  763. public function testAlphaBetaTrick2(): void
  764. {
  765. $expected = <<<'EOF'
  766. <?php
  767. class Foo
  768. {
  769. public function Foo()
  770. {
  771. echo 'alpha';
  772. }
  773. public function __construct()
  774. {
  775. // This is not $this->Foo()
  776. echo 'beta';
  777. }
  778. }
  779. EOF;
  780. $this->doTest($expected);
  781. }
  782. public function testAlphaBetaTrick3(): void
  783. {
  784. $expected = <<<'EOF'
  785. <?php
  786. class Foo
  787. {
  788. public function Foo()
  789. {
  790. echo 'alpha';
  791. /* yeah, ok let's construct it anyway */
  792. $this->__construct();
  793. }
  794. public function __construct()
  795. {
  796. echo 'beta';
  797. }
  798. }
  799. EOF;
  800. $this->doTest($expected);
  801. }
  802. public function testAlphaBetaTrick4WithAnotherClass(): void
  803. {
  804. $expected = <<<'EOF'
  805. <?php
  806. class Foo
  807. {
  808. public function Foo()
  809. {
  810. echo 'alpha';
  811. }
  812. public function __construct()
  813. {
  814. $this->Foo();
  815. // Do something more!
  816. echo 'beta';
  817. }
  818. }
  819. Class Bar
  820. {
  821. function __construct()
  822. {
  823. $this->foo = 1;
  824. }
  825. }
  826. EOF;
  827. $input = <<<'EOF'
  828. <?php
  829. class Foo
  830. {
  831. public function Foo()
  832. {
  833. echo 'alpha';
  834. }
  835. public function __construct()
  836. {
  837. $this->Foo();
  838. // Do something more!
  839. echo 'beta';
  840. }
  841. }
  842. Class Bar
  843. {
  844. function bar()
  845. {
  846. $this->foo = 1;
  847. }
  848. }
  849. EOF;
  850. $this->doTest($expected, $input);
  851. }
  852. public function testAbstract(): void
  853. {
  854. $expected = <<<'EOF'
  855. <?php
  856. abstract class Foo
  857. {
  858. abstract function Foo();
  859. }
  860. EOF;
  861. $this->doTest($expected);
  862. }
  863. public function testAbstractTrick(): void
  864. {
  865. $expected = <<<'EOF'
  866. <?php
  867. abstract class Foo
  868. {
  869. abstract public function Foo();
  870. public function bar()
  871. {
  872. // This is messed up, I know
  873. $this->__construct();
  874. }
  875. public function __construct()
  876. {
  877. $this->baz = 1;
  878. }
  879. }
  880. EOF;
  881. $this->doTest($expected);
  882. }
  883. public function testParentMultipleClasses(): void
  884. {
  885. $expected = <<<'EOF'
  886. <?php
  887. class Class1 extends Parent1
  888. {
  889. function __construct($foo)
  890. {
  891. parent::__construct();
  892. echo "something";
  893. }
  894. }
  895. class Class2 extends Parent2
  896. {
  897. function __construct($foo)
  898. {
  899. echo "something";
  900. }
  901. }
  902. ?>
  903. EOF;
  904. $input = <<<'EOF'
  905. <?php
  906. class Class1 extends Parent1
  907. {
  908. function __construct($foo)
  909. {
  910. $this->Parent1();
  911. echo "something";
  912. }
  913. }
  914. class Class2 extends Parent2
  915. {
  916. function __construct($foo)
  917. {
  918. echo "something";
  919. }
  920. }
  921. ?>
  922. EOF;
  923. $this->doTest($expected, $input);
  924. }
  925. public function testInfiniteRecursion(): void
  926. {
  927. $expected = <<<'EOF'
  928. <?php
  929. class Parent1
  930. {
  931. function __construct()
  932. {
  933. echo "foobar";
  934. }
  935. }
  936. class Class1 extends Parent1
  937. {
  938. function __construct($foo)
  939. {
  940. parent::__construct();
  941. echo "something";
  942. }
  943. }
  944. ?>
  945. EOF;
  946. $input = <<<'EOF'
  947. <?php
  948. class Parent1
  949. {
  950. function __construct()
  951. {
  952. echo "foobar";
  953. }
  954. }
  955. class Class1 extends Parent1
  956. {
  957. function Class1($foo)
  958. {
  959. $this->__construct();
  960. echo "something";
  961. }
  962. }
  963. ?>
  964. EOF;
  965. $this->doTest($expected, $input);
  966. }
  967. /**
  968. * @dataProvider provideFixPhp80Cases
  969. *
  970. * @requires PHP 8.0
  971. */
  972. public function testFixPhp80(string $expected, ?string $input = null): void
  973. {
  974. $this->doTest($expected, $input);
  975. }
  976. public static function provideFixPhp80Cases(): iterable
  977. {
  978. yield [
  979. <<<'EOF'
  980. <?php
  981. class Foo
  982. {
  983. public function __construct($bar,)
  984. {
  985. var_dump(1);
  986. }
  987. }
  988. EOF
  989. ,
  990. <<<'EOF'
  991. <?php
  992. class Foo
  993. {
  994. public function Foo($bar,)
  995. {
  996. var_dump(1);
  997. }
  998. }
  999. EOF
  1000. ];
  1001. yield [
  1002. '<?php
  1003. class Foo
  1004. {
  1005. public function __construct()
  1006. {
  1007. }
  1008. }',
  1009. '<?php
  1010. class Foo
  1011. {
  1012. public function Foo()
  1013. {
  1014. }
  1015. }',
  1016. ];
  1017. yield [
  1018. '<?php
  1019. class Foo
  1020. {
  1021. public function __construct()
  1022. {
  1023. $this?->__construct();
  1024. }
  1025. }',
  1026. '<?php
  1027. class Foo
  1028. {
  1029. public function Foo()
  1030. {
  1031. $this?->__construct();
  1032. }
  1033. }',
  1034. ];
  1035. yield [
  1036. '<?php
  1037. class Foo extends Bar
  1038. {
  1039. public function __construct()
  1040. {
  1041. parent::__construct();
  1042. }
  1043. }',
  1044. '<?php
  1045. class Foo extends Bar
  1046. {
  1047. public function Foo()
  1048. {
  1049. $this?->Bar();
  1050. }
  1051. }',
  1052. ];
  1053. yield [
  1054. '<?php
  1055. class Foo
  1056. {
  1057. /**
  1058. * Constructor
  1059. */
  1060. public function __construct($bar = 1, $baz = null)
  1061. {
  1062. var_dump(1);
  1063. }
  1064. }
  1065. ',
  1066. '<?php
  1067. class Foo
  1068. {
  1069. /**
  1070. * Constructor
  1071. */
  1072. public function __construct($bar = 1, $baz = null)
  1073. {
  1074. var_dump(1);
  1075. }
  1076. /**
  1077. * PHP-4 Constructor
  1078. */
  1079. function Foo($bar = 1, $baz = null)
  1080. {
  1081. $this?->__construct($bar, $baz);
  1082. }
  1083. }
  1084. ',
  1085. ];
  1086. }
  1087. }