在PHP微小的代码重用最佳实践(Best practice for tiny code reuse

2019-10-20 02:08发布

在很长一段时间,我有一个问题 - 我应该重用代码的一小部分,如果是这样,我应该怎么做,所以这将是最好的做法。

我的意思大约小码,例如:

if (!is_array($table)) {
    $table = array($table);  
}

要么

$x = explode("\n", $file_content);

$lines = array();

for ($i=0, $c = count($x); $i<$c; ++$i) {
  $x[$i] = trim($x[$i]);
  if ($x[$i] == '') {
     continue;
  }          
  $lines[] = $x[$i];      
}

代码这样的小零件可能会在许多类中使用一个项目,但他们中的一些也被用于许多项目。

有许多可能的解决方案,我认为:

  1. 创建简单的函数文件,并把它们放在一块可重用的代码作为函数,它们包括简单的项目,并使用它们,每当我想
  2. 创建性状的一块代码,并在课堂上使用它们
  3. 再利用由简单的复制粘贴代码或生成功能在特定的类(??)
  4. 其他?

我认为,所有这些解决方案都各有利弊。

:我应该使用什么方法(如果有的话)重用这种代码,为什么这种方法在你看来最好的?

Answer 1:

我认为,“最好的办法”取决于很多因素,包括你的应用程序中使用的技术(程序,OOP),PHP的版本运行它们,等等。例如,特征是有趣和有用的,但他们只能在PHP 5.4。 0,因此使用此工具将你的代码片段,你将不能够重复使用他们在早期的PHP版本上运行的系统。 在如果你的应用程序使用一个面向对象的样式,您可以在功能组织您的可重用的小代码片段另一方面,它们的使用似乎在一个面向对象的应用程序和冲突,在一个特定的类函数名的尴尬。 在这种情况下,我认为在课堂上分组的功能,会显得更自然。

将所有内容放在一起,似乎类而言分组可重用的代码片断勾勒以上,与早期的PHP版本即向后兼容性,避免函数名称冲突,等等)我个人的代码大多在OOP提供更好的工具,所以我有一个实用程序类在表示的代码段不直接彼此相关,因此可重用片I组小的功能不能在逻辑上在其它类细分电子邮件广告。



Answer 2:

前面已经提到性状是一件好事。 但可能是一个有点硬了一段时间后进行管理,并且可能无法因为它的新随处可见支持。

我要做的就是创建一个有很多小静的功能,比如工具类:

class ArrayTools
{

    static public function CheckArray($array)
    {
        if (!is_array($array))
        {
            $array = array($array);  
        }

        return $array;
    }    

}

所以,你可以把它叫做ArrayTools::CheckArray($array)



Answer 3:

请去traits ,如果你的代码主要涉及类和对象。作为特征的概念上的代码重用能力只集中。



Answer 4:

以下是这实际上我纯PHP项目中使用的代码片段,这些代码段是从各种框架的优良性状和最佳实践使用。

1.下面的代码是用来检查中,你的工作,根据环境,你可以设置一些全局变量的环境中,错误报告功能,等等。

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT','DEVELOPMENT');
}

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
        case 'TESTING':
            $base_url   =   'http://localhost/project_name/';
            error_reporting(E_ALL);
            break;

        case 'PRODUCTION':
            $base_url   =   'http://hostname/project_name/';
            error_reporting(0);
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}

2。

/* This function is used to PRINT the ARRAY data in the pre formatted manner */
if (!function_exists('pr')) {
    function pr($data) {
        echo '<pre>', print_r($data), '</pre>';
    }
}

3。

/* This function is used to Sanitize the user data and make data safe to insert into the database */
function sanitize($data) {
    global $link;
    $data = trim($data);
    return htmlentities(strip_tags(mysqli_real_escape_string($link, $data)));
}

4。

/* Used to get the difference of 2 arrays
   Returns the array with difference    
 */
function multi_diff($arr1,$arr2){
  $result = array();
  foreach ($arr1 as $k=>$v){
    if(!isset($arr2[$k])){
      $result[$k] = $v;
    } else {
      if(is_array($v) && is_array($arr2[$k])){
        $diff = multi_diff($v, $arr2[$k]);
        if(!empty($diff))
          $result[$k] = $diff;
      }
    }
  }
  return $result;
}

5。

/* This fnction is used to generate the random keys of specific length
  Accepts parameter of certain length if not specified it will generate 20 bit length automatically
 */
function generate_random_key($length = 20) {
    //Initializing the varialble
    $keystring = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
    $random_key = '';
    for ($i = 0; $i < $length; $i++) {
        $random_key.=$keystring[rand(0, strlen($keystring) - 1)];
    }
    //Return the randomly generated key
    return $random_key;
}

6。

/* This function outputs the errors in ul>li format with unstyled
 * To get the bullets styling remove class='list-unstyled' in <ul> tag */
function output_errors($errors){
    $output =   array();

    foreach ($errors as $error) {
        $output[]   =   '<li>'.$error.'</li>';
    }
    return '<ul class="list-unstyled">'.implode('', $output).'</ul>';
}

7。

/* Checks whether the user is loggedin else will redirect to the protectect page */
function protected_page(){
    if(is_loggedin() === false){
//        header('Location: protected.php');
        header('Location: logout.php');
        exit();
    }
}

8。

/* If user tries to access the page directly accessing through the URL,
 * If already loggedin then redirect him to any of the inner page 
 */
function login_redirect(){
    if(is_loggedin() === true){
        header('Location: home.php');
    }
}

9。

/* This function is used to check whether the user exists or not */
function email_exists($email){
    /* Your Code */
}


/* This function is used to check whether the user isActive or not */
function is_active($email){
    /* Your Code */
}


/* This function will get the userid from the email */
function userid_from_email($email) {
    /* Your Code */
}

/* This fucntion is used to login the user based on the email-id and password */
function login($email,$password){
    /* Your Code */
}

/* Check whether the USER is loggedin or not */
function is_loggedin(){
    return (isset($_SESSION['userid'])) ? true : false;
}

希望这可以帮助你。 干杯!



文章来源: Best practice for tiny code reuse in PHP