??? ??
KISS? ????? ??? ???? ?????. ??? ???? ??? ???? ??, ?? ??? ? ???, ?? ???? ???? ?????.
?? ??
1. ??? ??
// Complex (Bad) class UserRepository { public function getUserWithDetails($userId) { return array_reduce( $this->db->query("SELECT * FROM users WHERE id = ?", [$userId])->fetch(), function($carry, $userData) { return array_merge( $carry, $this->enrichUserData( $userData, $this->getAdditionalData($userData['id']) ) ); }, [] ); } private function enrichUserData($userData, $additionalData) { return array_map( function($data) use ($userData) { return $this->transformData($data, $userData); }, $additionalData ); } } // Simple (Good) class UserRepository { public function getUserWithDetails($userId) { $user = $this->db->query("SELECT * FROM users WHERE id = ?", [$userId])->fetch(); if (!$user) { return null; } $user['address'] = $this->getAddress($userId); $user['orders'] = $this->getRecentOrders($userId); return $user; } private function getAddress($userId) { return $this->db->query("SELECT * FROM addresses WHERE user_id = ?", [$userId])->fetch(); } private function getRecentOrders($userId) { return $this->db->query( "SELECT * FROM orders WHERE user_id = ? ORDER BY created_at DESC LIMIT 5", [$userId] )->fetchAll(); } }
2. ?? ??
// Complex (Bad) class ConfigManager { private $config = []; public function get($key) { return array_reduce( explode('.', $key), function($carry, $segment) { return is_array($carry) && isset($carry[$segment]) ? $carry[$segment] : null; }, $this->config ); } public function set($key, $value) { $segments = explode('.', $key); $current = &$this->config; while (count($segments) > 1) { $segment = array_shift($segments); if (!isset($current[$segment]) || !is_array($current[$segment])) { $current[$segment] = []; } $current = &$current[$segment]; } $current[array_shift($segments)] = $value; } } // Simple (Good) class ConfigManager { private $config = []; public function get($key) { if (isset($this->config[$key])) { return $this->config[$key]; } return null; } public function set($key, $value) { $this->config[$key] = $value; } }
3. ?? ??
// Complex (Bad) function getNextBusinessDay($date) { $timestamp = strtotime($date); $daysToAdd = 1; while (true) { $nextDay = strtotime("+$daysToAdd days", $timestamp); $dayOfWeek = date('N', $nextDay); if ($dayOfWeek < 6) { $holidays = $this->getHolidays(); $dateString = date('Y-m-d', $nextDay); if (!in_array($dateString, $holidays)) { return $dateString; } } $daysToAdd++; } } // Simple (Good) function getNextBusinessDay($date) { $nextDay = new DateTime($date); $nextDay->modify('+1 day'); while ($this->isWeekendOrHoliday($nextDay)) { $nextDay->modify('+1 day'); } return $nextDay->format('Y-m-d'); } private function isWeekendOrHoliday(DateTime $date) { $dayOfWeek = $date->format('N'); $isWeekend = ($dayOfWeek >= 6); $isHoliday = in_array($date->format('Y-m-d'), $this->holidays); return $isWeekend || $isHoliday; }
4. ?? ??? ??
// Complex (Bad) function validateUserInput($data) { return ( isset($data['email']) && filter_var($data['email'], FILTER_VALIDATE_EMAIL) && isset($data['password']) && strlen($data['password']) >= 8 && preg_match('/[A-Z]/', $data['password']) && preg_match('/[a-z]/', $data['password']) && preg_match('/[0-9]/', $data['password']) && (!isset($data['phone']) || (preg_match('/^\+?[1-9]\d{1,14}$/', $data['phone'])) ) ) ? true : false; } // Simple (Good) class UserValidator { public function validate($data) { $errors = []; if (!$this->isValidEmail($data['email'])) { $errors['email'] = 'Invalid email address'; } if (!$this->isValidPassword($data['password'])) { $errors['password'] = 'Password must be at least 8 characters with mixed case and numbers'; } if (isset($data['phone']) && !$this->isValidPhone($data['phone'])) { $errors['phone'] = 'Invalid phone number'; } return empty($errors) ? true : $errors; } private function isValidEmail($email) { return filter_var($email, FILTER_VALIDATE_EMAIL) !== false; } private function isValidPassword($password) { if (strlen($password) < 8) { return false; } return preg_match('/[A-Z]/', $password) && preg_match('/[a-z]/', $password) && preg_match('/[0-9]/', $password); } private function isValidPhone($phone) { return preg_match('/^\+?[1-9]\d{1,14}$/', $phone); } }
?? ??
- ??? ??: ???? 20? ???? ??
- ?? ??: ? ???/???? ? ?? ?? ? ???? ???
- ?? ?? ??: ??? ????? ???? ??? ??? ??? ?????
- ?? ??: ??? ??? ?? 2~3??? ??
- ?? ??: ?? ??? ??? ?? ?? ??
- ??: ?? ??? ????? ?????? ???
??? ??
- ?????: ???? ? ??? ? ??
- ???: ??? ? ???? ?? ??
- ???: ??? ??? ??? ? ??? ?????
- ???: ??? ????? ?????? ? ????
- ??: ?? ??? ???? ? ?? ??? ?????
? ??? KISS ??(???? ???? ???? ?????)? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

PHP ?? ??? ?? ???? ?? ? ????? ??? ?????. 1. ?? ??? ??? ??? ??? ? ? ??? ??? ??? ?? ?? ??? ???? ???????. 2. ?? ??? ???? ???? ? ?? ????? ?? ?? ?? ??? ?????. 3. $ _get ? $ _post? ?? Hyperglobal ??? ?? ???? ?? ??? ? ??? ??? ??????? ???????. 4. ?? ?? ?? ???? ?? ?? ?? ??? ?????? ?? ??? ??? ?? ??? ???????. ??? ??? ????? ??? ??? ?? ???? ????? ? ??? ? ? ????.

PHP ?? ???? ???? ????? ?? ? ??? ???? ?? ?? ? ??? ???? ?? ??? ?????? ??? ??? ? ? ???????. 1. ??? ?? CSRF? ???? ?? ??? ??? ???? ?????? ??? ???? FINFO_FILE? ?? ?? MIME ??? ?????. 2. ??? ??? ??? ???? ??? ?? ??? ?? ? WEB ????? ??? ???? ??????. 3. PHP ?? ??? ?? ? ?? ???? NGINX/APACHE? ??? ????? ?? ???? ?????. 4. GD ?????? ??? ? ?? ???? ??? ?? ??? ?? ????.

PHP ?? ???? ? ?? ???? ??? ????. 1. // ?? #? ???? ? ?? ??? ???? // ???? ?? ????. 2. ?? /.../ ?? ?? ?? ??? ????? ?? ? ?? ??? ?? ? ? ????. 3. ?? ?? ?? / if () {} /? ?? ?? ??? ????? ??? ?? ?? ?? ??? ???? ????? ???? ??? ?? ???? ???? ??? ? ??? ??????.

Ageneratorinphpisamemory- ???? Way-Erate-Overgedatasetsetsbaluesoneatimeatimeatimeatimallatonce.1.generatorsuseTheyieldKeywordTocroadtOpvaluesondemand, RetingMemoryUsage.2

PHP ??? ???? ??? ??? ??? ????? ????. ??? ????? ?? ???? ??? "?? ? ?"??? "?"? ???????. 1. ??? ? ??? ??? DocBlock (/*/)? ?? ?? ??? ???? ??? ? ?? ???? ??????. 2. JS ??? ???? ?? ???? ??? ?? ??? ??? ?????. 3. ??? ?? ?? ?? ??? ???? ????? ????? ???? ?? ????? ???? ? ??????. 4. Todo ? Fixme? ????? ???? ? ? ??? ??? ???? ?? ?? ? ??? ???????. ??? ???? ?? ??? ??? ?? ?? ?? ???? ???? ? ????.

toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1. ??, downloadandinstallxAmpp, selectComponents, startApache ? placefilesinhtdocs.2

PHP??? ???? ??? ?? ?? ????? ???? ??? ?? ??? ??? ?? ? ??? ??? ???? ?????. ???? 0?? ???? ?? ??? ???? ? ?? ???? ?? ?? ? ? ????. MB_SUBSTR? ?? ??? ??? ???????. ? : $ str = "hello"; echo $ str [0]; ?? H; ??? MB_SUBSTR ($ str, 1,1)? ?? ??? ??? ??? ??????. ?? ???????? ???? ??? ???? ?? ???? ?? ?? ???? ?????? ??? ????? ?? ??? ?? ??? ???? ???? ?? ????.

tolearnpheffectical, startBysetTupaloCalserErverEnmentUsingToolslikexamppandacodeeditor -likevscode.1) installxamppforapache, mysql, andphp.2) useacodeeditorforsyntaxsupport.3)) 3) testimplephpfile.next, withpluclucincludechlucincluclucludechluclucled
