Conditions | 8 |
Paths | 38 |
Total Lines | 55 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
60 | protected function execute(InputInterface $input, OutputInterface $output): int |
||
61 | { |
||
62 | $output->writeln('Looking for updates...'); |
||
63 | |||
64 | $allowPreRelease = $input->getOption('pre'); |
||
65 | |||
66 | if (PHP_VERSION_ID < 50600) { |
||
67 | $message = 'Self updating is not available in PHP versions under 5.6.' . "\n"; |
||
68 | $message .= 'The latest version can be found at ' . self::PHAR_URL; |
||
69 | $output->writeln(sprintf('<error>%s</error>', $message)); |
||
70 | return 1; |
||
71 | } elseif (Application::VERSION() === ('@package_version@')) { |
||
72 | $output->writeln('<error>Self updating has been disabled in source version.</error>'); |
||
73 | return 1; |
||
74 | } |
||
75 | |||
76 | $exitCode = 1; |
||
77 | |||
78 | $updater = new Updater(); |
||
79 | $updater->setStrategy(Updater::STRATEGY_GITHUB); |
||
80 | $updater->getStrategy()->setPackageName('phpdocumentor/phpDocumentor2'); |
||
|
|||
81 | $updater->getStrategy()->setPharName('phpDocumentor.phar'); |
||
82 | $updater->getStrategy()->getCurrentLocalVersion(Application::VERSION()); |
||
83 | |||
84 | if ($allowPreRelease) { |
||
85 | $updater->getStrategy()->setStability(GithubStrategy::ANY); |
||
86 | } |
||
87 | |||
88 | try { |
||
89 | if ($input->getOption('rollback')) { |
||
90 | $output->writeln('Rolling back to previous version...'); |
||
91 | $result = $updater->rollback(); |
||
92 | } else { |
||
93 | if (!$updater->hasUpdate()) { |
||
94 | $output->writeln('No new version available.'); |
||
95 | return 0; |
||
96 | } |
||
97 | |||
98 | $output->writeln('Updating to newer version...'); |
||
99 | $result = $updater->update(); |
||
100 | } |
||
101 | |||
102 | if ($result) { |
||
103 | $new = $updater->getNewVersion(); |
||
104 | $old = $updater->getOldVersion(); |
||
105 | |||
106 | $output->writeln(sprintf('Updated from %s to %s', $old, $new)); |
||
107 | $exitCode = 0; |
||
108 | } |
||
109 | } catch (Exception $e) { |
||
110 | $output->writeln(sprintf('<error>%s</error>', $e->getMessage())); |
||
111 | } |
||
112 | |||
113 | return $exitCode; |
||
114 | } |
||
115 | } |
||
116 |
Let’s take a look at an example:
In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different implementation of User which does not have a getDisplayName() method, the code will break.
Available Fixes
Change the type-hint for the parameter:
Add an additional type-check:
Add the method to the interface: