Home > Backend Development > PHP Tutorial > Learn PHP (4) php functions step by step Supplement 2_PHP tutorial

Learn PHP (4) php functions step by step Supplement 2_PHP tutorial

WBOY
Release: 2016-07-21 15:40:48
Original
872 people have browsed it

1. Solve the scope problem

In the previous section, we talked about the scope of functions in PHP. If classes are not enough to explain the problem, then the scope examples in this article may be more convincing to you.

So, how can we access external variables in PHP functions?

In PHP, there is a concept called global scope, that is, if you do not use functions (there will be the concept of classes in the future), then the variables you create can be accessed anywhere on the page. So, how do we solve the problem in the function body?

We can use the global keyword:

  <span style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php 
    </SPAN>$<SPAN style="COLOR: red">name</SPAN><SPAN style="COLOR: blue">="kym"</SPAN>;
    <SPAN style="COLOR: red">function Test</SPAN>()
    {
      <SPAN style="COLOR: red">global </SPAN>$<SPAN style="COLOR: red">name</SPAN>;
      <SPAN style="COLOR: red">echo</SPAN>($<SPAN style="COLOR: red">name</SPAN>);
    }
    <SPAN style="COLOR: red">Test</SPAN>();
  <SPAN style="COLOR: blue">?>
</span>
Copy after login

In this case, we are equivalent to getting a reference to the global variable $name without having to re-create a $name variable.

There is a saying in the PHP manual: Using global variables is equivalent to creating a reference to the variable in the $GLOBALS variable. Then we can imitate this semantics and write code like this:

  <span style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php 
    </SPAN>$<SPAN style="COLOR: red">name</SPAN><SPAN style="COLOR: blue">="kym"</SPAN>;
    <SPAN style="COLOR: red">function Test</SPAN>()
    {
      $<SPAN style="COLOR: red">temp</SPAN><SPAN style="COLOR: blue">=&$GLOBALS["</SPAN><SPAN style="COLOR: red">name</SPAN><SPAN style="COLOR: blue">"];
      echo($temp);
    }
    Test();
  ?>
</span>
Copy after login

In fact, these two are equivalent codes. It seems that using variables in this way is troublesome, but this actually avoids many side effects. For example, Java and C# are object-oriented languages, but in PHP, everything is on one page or even multiple pages. If you don’t use this This method can easily produce side effects (accidental modification) of the function.

2. Default parameters

The first time I heard this concept was probably in C++. After I learned C#, I have never been exposed to this concept, but I still like this feature very much.

This eliminates the need to write a bunch of troublesome overloaded functions for a function.

Write the simplest example:

  <span style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php 
    </SPAN><SPAN style="COLOR: red">function Test</SPAN>($<SPAN style="COLOR: red">name</SPAN><SPAN style="COLOR: blue">="kym"</SPAN>)
    {
      <SPAN style="COLOR: red">echo</SPAN>($<SPAN style="COLOR: red">name</SPAN>);
    }
    <SPAN style="COLOR: red">Test</SPAN>();
    <SPAN style="COLOR: red">Test</SPAN>(<SPAN style="COLOR: blue">"others"</SPAN>);
  <SPAN style="COLOR: blue">?>
</span>
Copy after login

Isn’t it necessary to write an overloaded function?

But there are two points to note here:

A. When setting default values ​​for parameters, only the simplest constants can be set, and complex expressions cannot be included.

B. Parameters that require default values ​​must be placed at the end. This is similar to variable parameters in C#.

3. Variable parameters

In C#, there is such a concept called variable parameters. Let’s write a simple example:

<span style="COLOR: blue">protected void </span>LinkButton1_Click(<span style="COLOR: blue">object </span>sender, <span style="COLOR: #2b91af">EventArgs </span>e)
{
  Response.Write(GetSum(1, 2, 3, 4, 5));
}
<span style="COLOR: blue">public int </span>GetSum(<span style="COLOR: blue">params int</span>[] elements)
{
  <span style="COLOR: blue">int </span>sum = 0;
  <span style="COLOR: blue">for </span>(<span style="COLOR: blue">int </span>i = 0; i < elements.Length; i++)
  {
    sum += elements[i];
  }
  <SPAN style="COLOR: blue">return </SPAN>sum;
}
Copy after login

Before writing examples, let me first introduce three functions related to variable parameters.

func_get_args() returns an array of all parameters of the function

func_get_arg() returns a specific argument from parameters

func_num_args() returns the number of parameters.

Okay, then let’s write a PHP version corresponding to the C# version.

  <SPAN style="COLOR: blue"><?</SPAN><SPAN style="COLOR: maroon">php 
    </SPAN><SPAN style="COLOR: red">function GetSum</SPAN>()
    {
      <SPAN style="COLOR: red">if</SPAN>(<SPAN style="COLOR: red">func_num_args</SPAN>()<SPAN style="COLOR: blue">=</SPAN>=0)
      {
        <SPAN style="COLOR: red">return </SPAN>0;
      }
      $<SPAN style="COLOR: red">sum</SPAN><SPAN style="COLOR: blue">=0;
      </SPAN><SPAN style="COLOR: red">for</SPAN>($<SPAN style="COLOR: red">i</SPAN><SPAN style="COLOR: blue">=0;$i<</SPAN><SPAN style="COLOR: maroon">func_num_args</SPAN>();$<SPAN style="COLOR: red">i</SPAN>++)
      {
        $<SPAN style="COLOR: red">sum</SPAN>+<SPAN style="COLOR: blue">=func_get_arg($i);
      </SPAN>}
      <SPAN style="COLOR: red">return </SPAN>$<SPAN style="COLOR: red">sum</SPAN>;  
    }
    <SPAN style="COLOR: red">echo</SPAN>(<SPAN style="COLOR: red">GetSum</SPAN>(1,2,3,4));
  ?<SPAN style="COLOR: blue">>
Copy after login

4. Variable function

I don’t know why it needs to be translated into this name. It actually calls the corresponding function based on the name of the variable.

is very similar to this eval in JS, as shown below:

<span style="COLOR: teal"><</SPAN><SPAN style="COLOR: #3f7f7f">script</SPAN><SPAN style="COLOR: teal">>
  </span><span style="COLOR: #7f0055">function </span>Execute(functionName)
  {
    eval(functionName+<span style="COLOR: #2a00ff">"()"</span>);
  }
  <span style="COLOR: #7f0055">function </span>Test()
  {
    alert(<span style="COLOR: #2a00ff">"111"</span>);
  }
  Execute(<span style="COLOR: #2a00ff">"Test"</span>);
<span style="COLOR: teal"></</SPAN><SPAN style="COLOR: #3f7f7f">script</SPAN><SPAN style="COLOR: teal">></span>
Copy after login

This is to pass in a function name and then execute the corresponding function. Well, in PHP, it's actually the same, and it's simpler.

<span style="COLOR: red"><?php 
  </SPAN><SPAN style="COLOR: blue">function </SPAN>Test(<SPAN style="COLOR: #660000">$func</SPAN>)
  {
    <SPAN style="COLOR: #660000">$func</SPAN>();
  }
  <SPAN style="COLOR: blue">function </SPAN>First(){<SPAN style="COLOR: blue">echo</SPAN>(<SPAN style="COLOR: #008200">"first"</SPAN>);}
  Test(<SPAN style="COLOR: #008200">"First"</SPAN>);
<SPAN style="COLOR: red">?></span>
Copy after login

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/321306.htmlTechArticle1. Solve the scope problem. In the previous section, we talked about the scope problem of functions in PHP. If the class is still If it is not enough to explain the problem, then the scope example in this article may be more convincing to you...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template