简体   繁体   中英

PHP IF Statement how can I write it more elegant and effective

I now have this code based on some of the answers below.

Is this the most elegant, clean, fast and effective code to have?

<?php
/**
 * The default template for displaying Google Analytics
 *
 * @package WordPress
 * @subpackage News_Template
 * @since News Template 1.0
 */
$googleanalyticscode="<script type='text/javascript'> var _gaq = _gaq || []; _gaq.push(['_setAccount', '%s']); _gaq.push(['_setDomainName', '%s']);   _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script>";
$analyticsurlgoogle=array(
    'domain-a.com' => 'UA-25133-2',
    'domain-b.com' => 'UA-25133',
    'domain-c.com' => 'UA-2699-2',
    'domain-d.com' => 'UA-3021-2',
    'domain-e.com' => 'UA-25537-2',
    'domain-f.com' => 'UA-7213-2',
    'domain-g.com' => 'UA-7214-2',
    'domain-h.com' => 'UA-150-2',
    'domain-i.com' => 'UA-150-2'
); 
// --- /Configuration --- 
// Get the Domain URL 
$analyticsurl = get_site_url(); 
$namegoogle = substr($analyticsurl,7); 
//create code 
if (isset($analyticsurlgoogle[$namegoogle])) $code=sprintf($googleanalyticscode,$analyticsurlgoogle[$namegoogle],$namegoogle); 
else $code=''; 
echo $code; ?>

------ Previous Code ------

I have written the following if statement in PHP. What would be the most elegant, effective and cleanest way of writing this code?

The purpose of the code is to check the domain name of the site. If the site have google analytics defined it should match the defined "Google Analytics" code for the domain and then print the script to the page.

If the Google Analytics code is not defined it should show nothing!

<?php 
// Get the Domain URL
$analyticsurl = get_site_url();
// Check if domain is defined
if ($analyticsurl == 'http://domain-a.com') {$analyticcode = 'UA-25133920-1'; $analyticsurlname = 'domain-a.com';} // domain-a.com
if ($analyticsurl == 'http://domain-b.com') {$analyticcode = 'UA-25133920-1'; $analyticsurlname = 'domain-b.com';} // domain-b.com
if ($analyticsurl == 'http://domain-c.com') {$analyticcode = 'UA-26990264-1'; $analyticsurlname = 'domain-c.com';} // domain-c.com
if ($analyticsurl == 'http://domain-d.com') {$analyticcode = 'UA-30217571-1'; $analyticsurlname = 'domain-d.com';} // domain-d.com
if ($analyticsurl == 'http://domain-e.com') {$analyticcode = 'UA-25537388-1'; $analyticsurlname = 'domain-e.com';} // domain-e.com
// if domain is defined create Google Analytics Code and insert variables
$analyticscode_1 = "<script type='text/javascript'>
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', '".$analyticcode."']);
  _gaq.push(['_setDomainName', '".$analyticsurlname."']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>";
// if URL does not match write nothing
if ($analyticcode == '') {$analyticscode = '';}
// if URL exists set the Google Analytics Code
if ($analyticcode != '') {$analyticscode = $analyticscode_1;}
?>
<?php // write the Analytics code to the page
echo $analyticscode ?>

Parse the url with parse_url (or remove the http:// part with a regexp).

Put all the codes in an array, where key is the domain name. Then it's a simple lookup.

$codes = array(
 'domain-a.com' => 'UA-25133920-1',
  //...
);
<?php

// --- Configuration ---

$template="<script type ... 
  _gaq.push(['_setAccount', '%s']);
  _gaq.push(['_setDomainName', '%s']);
  ...
</script>";

$urls=array(
 'domain-a.com' => 'UA-25133920-1',
 ...
 'domain-e.com' => 'UA-25537388-1'
);

// --- /Configuration ---

// Get the Domain URL
$url = get_site_url();
$name = substr($analyticsurl,7);

//create code
if (isset($urls[$name])) $code=sprintf($template,$urls[$name],$name);
else $code='';

// ...

echo $code;
?>

一个switch语句。

i would hold all the records in a single array so that i don't repeat the condition again and again.

$siteurl = get_site_url();

$analyticsurl = array(
    'http://domain-a.com' => 'UA-25133920-1', 
    'http://domain-b.com' => 'UA-25133920-1', 
    'http://domain-c.com' => 'UA-26990264-1', 
    'http://domain-d.com' => 'UA-30217571-1', 
    'http://domain-e.com' => 'UA-25537388-1'
);

if(in_array($siteurl, $analyticsurl)) {
    $analyticcode = $analyticsurl[$siteurl];
    $analyticsurlname = str_replace('http://', '', $siteurl);
}

Consider using a switch statement:

switch ($analyticsurl)
{
 case: 'http://domain-a.com':
 // do some stuff
 break;

 case: 'http://domain-b.com':
 // do some stuff
 break;

 case: 'http://domain-c.com':
 // do some stuff
 break;

 case: 'http://domain-d.com':
 // do some stuff
 break;

 case 'http://domain-e.com':
 // do some stuff
 break;

 default:
 // do something by default if no match
 break;
}
<?php 

$domains['http://domain-a.com']['code'] = 'UA-25133920-1';
$domains['http://domain-a.com']['urlname'] = 'domain-a.com';
$domains['http://domain-b.com']['code'] = 'UA-25133920-1';
$domains['http://domain-b.com']['urlname'] = 'domain-b.com';
...

// Get the Domain URL
$analyticsurl = get_site_url();

// Check if domain is defined
if (array_key_exists($analyticsurl)) {
    // if domain is defined create Google Analytics Code and insert variables
?>
    <script type='text/javascript'>
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', '<?php= $domains[$analyticsurl]['code'] ?>']);
      _gaq.push(['_setDomainName', '<?php= $domains[$analyticsurl]['urlname'] ?>']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();

    </script>
<?php
}
?>

$domains['http://domain-b.com']['urlname'] = 'domain-b.com'; could be improved, because your just stripping the HTTP-part, but I was too lazy to provide a solution for that.

Use a switch block:

switch ($analyticsurl) {
    case: 'http://domain-a.com' :
        $analyticcode = 'UA-25133920-1';
        $analyticsurlname = 'domain-a.com';
    break;
    default:
    break;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM