Php 到哪里去?

Php 到哪里去?,php,oop,design-patterns,frameworks,Php,Oop,Design Patterns,Frameworks,我的项目中的所有代码都是过程性的。它没有使用任何框架或任何MVC结构。大多数PHP都是带有一些逻辑的表单处理程序。所以有很多这样的代码: <?php require "headerFile.php"; $user = array(); // filled with user data if (isset($_POST['submitButton'])) { if (isset($_POST['money'])) { if (is_numeric($_POST[

我的项目中的所有代码都是过程性的。它没有使用任何框架或任何MVC结构。大多数PHP都是带有一些逻辑的表单处理程序。所以有很多这样的代码:

<?php

require "headerFile.php";

$user = array(); // filled with user data

if (isset($_POST['submitButton'])) {
    if (isset($_POST['money'])) {
        if (is_numeric($_POST['money'])) { // I don't actually validate numbers this way
            if ($_POST['money'] <= $user['money']) {
                $query = mysql_query("SELECT * FROM someTable WHERE id={$user['id']}");

                if($result = mysql_fetch_array($query)) {
                    if ($someOtherCheck == $user['someOtherData']) {
                        /*
                         * run some queries, give user some item
                         *
                         */
                    } else {
                        echo "This isn't right.";
                    }
                } else {
                    echo "You don't have a row in some table!";
                }
            } else {
                echo "You don't have that much money!";
            }
        } else {
            echo "Enter a valid number";
        }
    } else {
        echo "Enter how much you want to wager.";
    }
}

// some hard coded form goes here

require "footerFile.php";

?>

OOP并不总是关于应用程序。它是关于可读性和结构的。老实说,你在这里发布的代码可读性如何?有大量的事情发生,你需要10分钟来破译它们。然而,如果你用类函数把它分解成类,你就可以一目了然,知道发生了什么

OOP并不是一直在为php做大量工作,但它是您希望为几乎所有其他非静态加载语言做的事情。另外一个好处是,如果一个项目中有多个程序员,那么两个程序员都可以阅读代码。我是你的朋友

最好的选择是使用带返回的函数。返回值,然后函数对其执行任何需要执行的操作。我个人会这样做

$class->check

如果错误

$this->error\u处理程序


函数错误处理程序会执行您希望它对错误执行的任何操作,如果它的死或回显,则执行该操作,但您构建了错误处理程序,因此,如果您想要更改它,您可以将它放在一个位置而不是20个位置。

OOP并不总是与应用程序有关。它是关于可读性和结构的。老实说,你在这里发布的代码可读性如何?有大量的事情发生,你需要10分钟来破译它们。然而,如果你用类函数把它分解成类,你就可以一目了然,知道发生了什么

OOP并不是一直在为php做大量工作,但它是您希望为几乎所有其他非静态加载语言做的事情。另外一个好处是,如果一个项目中有多个程序员,那么两个程序员都可以阅读代码。我是你的朋友

最好的选择是使用带返回的函数。返回值,然后函数对其执行任何需要执行的操作。我个人会这样做

$class->check

如果错误

$this->error\u处理程序


函数错误处理程序会执行您希望它对错误执行的任何操作,如果它的die或echo执行该操作,但是您构建了错误处理程序,因此,如果您想要更改它,您可以将它放在一个位置,而不是20个位置。

即使不引入OOP,您也可以为构建可读的代码创造奇迹。如果条件句彼此不依赖,就没有必要嵌套它们

$form_is_valid = true;

if (!isset($_POST['submitButton'])) {
    echo "This isn't right.";
    $form_is_valid = false;
}

if (!isset($_POST['money'])) {
    echo "Enter how much you want to wager.";
    $form_is_valid = false;
} elseif (!is_numeric($_POST['money'])) {
    echo "Enter a valid number";
    $form_is_valid = false;
} elseif (!$_POST['money'] <= $user['money']) {
    echo "You don't have that much money!";
    $form_is_valid = false;
}

if ($form_is_valid) {
    do_stuff_here();
}
$form\u是有效的=true;
如果(!isset($\u POST['submitButton'])){
回声:“这不对。”;
$form\u is\u valid=false;
}
如果(!isset($_POST['money'])){
echo“输入您要下注的金额。”;
$form\u is\u valid=false;
}elseif(!是数字($\u POST['money'])){
echo“输入有效数字”;
$form\u is\u valid=false;

}elseif(!$\u POST['money']即使不引入OOP,您也可以为构建可读的代码创造奇迹。如果您的条件不相互依赖,则无需嵌套它们

$form_is_valid = true;

if (!isset($_POST['submitButton'])) {
    echo "This isn't right.";
    $form_is_valid = false;
}

if (!isset($_POST['money'])) {
    echo "Enter how much you want to wager.";
    $form_is_valid = false;
} elseif (!is_numeric($_POST['money'])) {
    echo "Enter a valid number";
    $form_is_valid = false;
} elseif (!$_POST['money'] <= $user['money']) {
    echo "You don't have that much money!";
    $form_is_valid = false;
}

if ($form_is_valid) {
    do_stuff_here();
}
$form\u是有效的=true;
如果(!isset($\u POST['submitButton'])){
回声:“这不对。”;
$form\u is\u valid=false;
}
如果(!isset($_POST['money'])){
echo“输入您要下注的金额。”;
$form\u is\u valid=false;
}elseif(!是数字($\u POST['money'])){
echo“输入有效数字”;
$form\u is\u valid=false;

}elseif(!$\u POST['money']看起来您的代码正在组合模型层和视图层的某些组件。您正在对数据库运行查询,并且在同一位置,您正在包含硬编码表单。因此,您最好从将这些任务拆分为两个单独的类开始。例如,编写一个类以连接到数据库并对它运行查询,并运行另一个类来实际提供您的内容

我对设计模式的建议是不要太过拘泥于细节。相反,试着去理解为什么某些模式如此有用,以及它们试图解决什么问题。很多初学者太过拘泥于如何解决问题,他们最终浪费了太多的时间来学习框架的细微差别,而一个简单的解决方案可能已经过时了冰镇的


最后,在通读代码时,请注意可能被构造成类的内容。此外,请记住,专业化是关键,通过构建在其功能上非常专业的类,您正在构建可能用于其他项目的模块化组件,

看起来您的代码是将模型层和视图层的某些组件组合在一起。您正在对数据库运行查询,而在同一位置,您正在包含硬编码表单。因此,您最好从将这些任务拆分为两个单独的类开始。例如,编写一个类以连接到数据库并对其运行查询,以及其他类来实际提供您的内容

我对设计模式的建议是不要太过拘泥于细节。相反,试着去理解为什么某些模式如此有用,以及它们试图解决什么问题。很多初学者太过拘泥于如何解决问题,他们最终浪费了太多的时间来学习框架的细微差别,而一个简单的解决方案可能已经过时了冰镇的


最后,在阅读代码时,请注意可能被构造成类的内容。此外,请记住,专业化是关键,通过构建在其功能上非常专业的类,您正在构建可能在其他项目中使用的模块化组件复制和粘贴的代码应该是一个大红旗。这应该是一个警告,您需要编写一个可以使用的通用函数,而不是复制和粘贴

其次,是时候停止使用
mysql\u查询了 // functionality on checking values is the same, but it's content is not
 if (isset($_POST['submitButton'])) {
   if (isset($_POST['money'])) {
     if (is_numeric($_POST['money'])) {
 // though every decision made by its content is only being produced once .. 
      } else
          echo "You don't have that much money!";
    } else
        echo "Enter a valid number";
} else
    echo "Enter how much you want to wager.";
$_POST = array_merge(array(
  'submitButton' => null,
  'money' => 0,
  'etc' => '...'
, $_POST);
$valid_form = array(
  'submitButton' => array('not_null'),
  'money' => array('not_null','int'),
  'etc' => '...'
); 
function validateForm($values, $valid) {
  // error array to be returned
  $error = array();
  // let's iterate over each value, remember we defaulted the $_POST array with
  // all the fields it can have, so all fields should be iterated apon.
  foreach($values as $key => $value) {
    if(array_key_exist($key, $valid)) {
      // logic content can be used by different functions, switch
      // used here for simplicity
      foreach($valid[$key] as $validation) {
        switch($validation) {
          case 'not_null':
            if(is_null($value)) {
              $error[] = "error logic";
              continue; // skip rest
            }
          break;
          case 'etc':
            $error[] = "..";
          break;
        }
      }
    }
  }
  return $error ? $error : true; // true being valid
}
$vfe = $valid_form_errors = array( // $vfe for simlicity's sake
  '__no_error' => 'no error present for "%key%" validation',
  'not_null' => '%key% should not be null',
  'int' => '%key% expects to be an integer'
);

$valid_form = array(
  'submitButton' => array('not_null'),
  'money' => array('not_null','int'),
  'etc' => '...'
);
function error_msg($key, $validation) {
  global $vfe;
  // error exists?
  $eE = array_key_exists($validation,$vfe);
  return str_replace('%key%', $eE?$key:$validation, $vfe[$eE?$validation:'__no_error']);
}
  foreach($valid[$key] as $validation) {
    switch($validation) {
      case 'not_null':
        if(is_null($value))
          $error[] = error_msg($key, $validation);
      break;
      case 'etc':
        $error[] = "..";
      break;
    }
  }
    // first stage ..
    $form_valid = validateForm($_POST, $valid_form);    
    if ($form_valid === true) {
      // second stage, same logic be applied as with validateForm, etc.
      if($_POST['money'] <= $user['money']) {
        $query = mysql_query("SELECT * FROM someTable WHERE id={$user['id']}");

        if($result = mysql_fetch_array($query)) {
            // third stage, same logic can be applied here..
            if ($someOtherCheck == $user['someOtherData']) {

            } else {
                echo "This isn't right.";
            }
        } else {
            echo "You don't have a row in some table!";
        }
    }
    else {
      $errors = $form_valid;
      // error handling here
      print_r($errors);
    }