User Tools

Site Tools


eg-259:lecture17

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
eg-259:lecture17 [2008/11/13 18:58] – external edit 127.0.0.1eg-259:lecture17 [2013/03/06 19:22] – [Introduction to PHP (Part 2)] eechris
Line 1: Line 1:
  
 +
 +~~SLIDESHOW~~
 +====== Introduction to PHP (Part 2) ======
 +
 +**Contact Hour 22**: To be discussed on Wednesday 20th March, 2013.
 +
 +**Lecturer**: [[C.P.Jobling@Swansea.ac.uk|Dr Chris P. Jobling]].
 +
 +More on the language features of PHP
 +
 +
 +
 +
 +===== Introduction to PHP (Part 2) =====
 +
 +We continue our review of the Basics of PHP with a discussion of //arrays//, //functions// and //regular expressions//.
 +
 +----
 +
 +Based on Chapter 12 of Robert W. Sebasta, //Programming the World-Wide Web//, 3rd Edition, Addison Wesley, 2006. and Chapter 12 of Chris Bates, //Web Programming: Building Internet Applications//, 3rd Edition, John Wiley, 2006.
 +
 +===== Contents of this Lecture =====
 +
 +//Further features of the PHP language with examples//
 +
 +  * [[eg-259:lecture17#arrays|Arrays]] 
 +  * [[eg-259:lecture17#functions|Functions]]
 +  * [[eg-259:lecture17#pattern_matching|Pattern Matching]]
 +
 +The [[eg-259:examples:php1#examples_from_lecture_17|Examples for PHP Part 2]].
 +
 +
 +===== Learning Outcomes ====
 +
 +//At the end of this lecture you should be able to answer these questions//:
 +
 +  - In what two ways can arrays in PHP be created? 
 +  - What keys are used when an array is created but no keys are specified? 
 +  - Must all of the values of an array be of the same type? 
 +  - Must all of the keys of an array be of the same type? 
 +  - What exactly do the ''array_keys'' and ''array_values'' functions do? 
 +
 +
 +
 +
 +
 +===== Learning Outcomes (continued) =====
 +
 +//At the end of this lecture you should be able to answer these questions//:
 +
 +  - What exactly does the ''in_array'' function do? 
 +  - Explain the actions of the ''implode'' and ''explode'' functions. 
 +  - Describe the actions of the ''next'', ''reset'', and ''prev'' functions. 
 +  - What are the syntax and semantics of the two forms of the ''foreach'' statement? 
 +  - Describe the result of using the ''sort'' function on an array that has both string and numeric values. 
 +
 +
 +===== Learning Outcomes (continued) =====
 +
 +//At the end of this lecture you should be able to answer these questions//:
 +
 +  - What is the difference between the ''sort'' and ''asort'' functions? 
 +  - What happens if a script defines the same function more than once? 
 +  - Are function names case sensitive? 
 +  - What value is returned by a function if its execution does not end by executing a ''return'' statement? 
 +
 +
 +
 +===== Learning Outcomes (continued) =====
 +
 +//At the end of this lecture you should be able to answer these questions//:
 +
 +  - What are the two ways you can specify that a parameter is to be passed by reference? 
 +  - How can a variable used outside a function be accessed by the function? 
 +  - How can you define a variable in a function so that its lifetime extends beyond the time the function is in its first execution? 
 +
 +
 +===== Arrays =====
 +
 +  * Not like the arrays of any other programming language 
 +  * A PHP array is a //generalization// of the arrays of other languages 
 +  * A PHP array is really a mapping of keys to values, where the keys can be numbers (to get a //traditional// array) or strings (to get a //associative// array) 
 +
 +
 +===== Array creation =====
 +
 +  * Use the ''array()'' construct, which takes one or more ''key => value'' pairs as parameters and returns an array of them 
 +  * The keys are non-negative integer literals or string literals 
 +  * The values can be anything 
 +  * //Example//:
 +<code php>
 +    $list = array(0 => "apples", 1 => "oranges", 2 => "grapes")
 +</code>
 +  * This is a "regular" array of strings
 +
 +
 +===== Array creation (continued) =====
 +
 +  * If a key is omitted and there have been integer keys, the default key will be the largest current key + 1 
 +  * If a key is omitted and there have been no integer keys, 0 is the default key 
 +  * If a key appears that has already appeared, the new value will overwrite the old one 
 +
 +
 +
 +===== Array elements =====
 +
 +  * Arrays can have mixed kinds of elements
 +  * //Some examples//:
 +<code php>
 +    $list = array("make" => "Cessna", "model" => "C210", 
 +                  "year" => 1960, 3 => "sold");
 +
 +    $list = array(1, 3, 5, 7, 9);
 +
 +    $list = array(5, 3 => 7, 5 => 10, "month" => "May");
 +
 +    $colours = array('red', 'blue', 'green', 'yellow');
 +</code>
 +
 +
 +===== Accessing array elements =====
 +
 +  * //Use brackets//:
 +<code php>
 +    $list[4] = 7;
 +    $list["day"] = "Tuesday";
 +    $list[] = 17;
 +</code>
 +  * If an element with the specified key does not exist, it is created
 +  * If the array does not exist, the array is created
 +
 +
 +===== Accessing array elements =====
 +
 +  * The keys or values can be extracted from an array:
 +<code php>
 +    $highs = array("Mon" => 74, "Tue" => 70,
 +                   "Wed" => 67, "Thu" => 62,
 +                   "Fri" => 65);
 +    $days = array_keys($highs);
 +    $temps = array_values($highs);
 +</code>
 +
 +
 +
 +===== Dealing with Arrays =====
 +
 +  * An array can be deleted with ''unset'':
 +<code php>
 +    unset($list);
 +    unset($list[4]);  # No index 4 element now
 +</code>
 +  * ''is_array($list)'' returns ''true'' if ''$list'' is an array
 +  * ''in_array(17, $list)'' returns true if 17 is an element of ''$list''
 +
 +
 +===== Dealing with Arrays (continued) =====
 +
 +  * ''explode(" ", $str)'' creates an array with the values of the words from ''$str'', split on a space 
 +  * ''implode(" ", $list)'' creates a string of the elements from ''$list'', separated by a space 
 +
 +
 +
 +
 +===== Internal structure of arrays  =====
 +
 +{{eg-259:l17-logical-structure.png|The logical internal structure of arrays in PHP}}
 + 
 +
 +
 +===== Sequential access to array elements =====
 +
 +  * Use ''current'' and ''next'':
 +<code php>
 +    $colours = array("blue", "red", "green", "yellow");
 +    $colour = current($colours);
 +    print("$colour <br />");
 +    while ( $colour = next($colours) ) {
 +      print ("$colour <br />");
 +    }
 +</code>
 +  * This does not always work -- for example, if the value in the array happens to be ''FALSE''
 +
 +
 +
 +===== Sequential access to array elements (continued) =====
 +
 +  * //Alternative//: use ''each'', instead of ''next'':
 +<code php>
 +    while ( $element = each($colours) ) {
 +      print ("$element['value'] <br />");
 +    }
 +</code>
 +  * The ''prev'' function moves ''current'' backwards
 +
 +===== Sequential access to array elements (continued) =====
 +
 +  * To implement stacks with an array use ''array_push($list, $element)'' and ''array_pop($list)'' 
 +
 +
 +===== Sequential access to array elements (continued) =====
 +
 +  * To visit every element of an array use ''foreach (array_name as scalar_name) { ... }:''
 +<code php>
 +    foreach ($colours as $colour) {
 +      print "Is $colour your favourite colour?<br />";
 +    }
 +</code>
 +  * //produces//:
 +  
 +  Is red your favourite colour?
 +  Is blue your favourite colour?
 +  Is green your favourite colour?
 +  Is yellow your favourite colour?
 +
 +
 +
 +===== Sequential access to array elements (continued) =====
 +
 +  * ''foreach'' can iterate through both //keys// and //values//:
 +<code php>
 +    foreach ($colours as $key => $colour) { ... }
 +</code>
 +  * Inside the compound statement, both ''$key'' and ''$colour'' are defined
 +  * //Example//:
 +<code php>
 +    $ages = array("Bob" => 42, "Mary" => 43);
 +    foreach ($ages as $name => $age) {
 +      print("$name is $age years old <br />");
 +    }
 +</code>
 +
 +
 +===== Sorting Arrays =====
 +
 +  * ''sort'' sorts the values of an array, leaving the keys in their present order -- intended for traditional arrays
 +    *e.g., ''sort($list);''
 +  * The ''sort'' function does not return anything
 +  * Works for both strings and numbers, even mixed strings and numbers:
 +<code php>
 +    $list = ('h', 100, 'c', 20, 'a');
 +    sort($list);
 +    // Produces ('a', 'c', 'h'‘, 20, 100)
 +</code>
 +
 +
 +===== Sorting Arrays (continued) =====
 +
 +  * In PHP 4+, the sort function can take a second parameter, which specifies a particular kind of sort:
 +<code php>
 +    sort($list, SORT_NUMERIC);
 +</code>
 +
 +
 +===== More sorting functions =====
 +
 +  * ''asort'' sorts the values of an array, while keeping the key/value relationships -- intended for associative arrays
 +  * ''rsort'' sorts the values of an array into reverse order
 +  * ''ksort'' sorts the elements of an array by the keys, maintaining the key/value relationships e.g.:
 +<code php>
 +    $list("Fred" => 17, "Mary" => 21, "Bob" => 49, "Jill" => 28);
 +    ksort($list);
 +    // $list is now ("Bob" => 49, "Fred" => 17, "Jill" => 28, "Mary" => 21)
 +</code>
 +  * ''krsort'' sorts the elements of an array by the keys into reverse order
 +
 +
 +
 +
 +
 +
 +
 +===== Example of Array Sorting =====
 +
 +  * An example to illustrate several of the sorting functions: [[/eg-259/examples/lecture17/sorting.php|sorting.php]] ([[http://localhost/eg-259/examples/lecture17/sorting.php|sorting.php @ localhost]])
 +
 +----
 +
 +   * //Code//:
 +<code php>
 +<<!DOCTYPE html>
 +
 +<!-- sorting.php - An example to illustrate several of the
 +     sorting functions -->
 +<html lang="en">
 +  <head> 
 +    <meta charset="utf-8" />
 +    <title> sorting.php - An example to illustrate several of the
 +     sorting functions </title>
 +  </head>
 +  <body>
 +    <?php
 +       $original = array("Fred" => 31, "Al" => 27,
 +                         "Gandalf" => "wizzard",
 +                         "Betty" => 42, "Frodo" => "hobbit");
 +    ?>
 +    <h4> Original Array </h4>
 +    <?php
 +      foreach ($original as $key => $value) {
 +         print("[$key] => $value <br />");
 +      }
 +    ?>
 +    <h4> Array sorted with sort </h4>
 +    <?php
 +      $new = $original;
 +      sort($new);
 +       foreach ($new as $key => $value) {
 +         print("[$key] = $value <br />");
 +       }
 +    ?>
 +    <h4> Array sorted with asort </h4>
 +    <?php
 +       $new = $original;
 +       asort($new);
 +       foreach ($new as $key => $value) {
 +         print("[$key] = $value <br />");
 +       }
 +    ?>
 +    <h4> Array sorted with ksort </h4>
 +    <?php
 +       $new = $original;
 +       ksort($new);
 +       foreach ($new as $key => $value) {
 +         print("[$key] = $value <br />");
 +       }
 +    ?>
 +  </body>
 +</html> 
 +</code>
 +  * //Result//:
 +
 + {{eg-259:l17-sorting.png|Result of running the sort.php example}}
 +
 +
 +
 +===== User-Defined Functions =====
 +
 +  * //Syntactic form//:
 +<code php>
 +    function function_name( [formal_parameters] ) {
 +      ...
 +    }
 +</code>
 +
 +
 +===== General Characteristics of Functions =====
 +
 +  * Functions need not be defined before they are called (in PHP 3, they must) 
 +  * Function overloading is not supported((PPHP 5 supports classes, so it may be possible to use overloading for polymorphism)) 
 +  * If you try to redefine a function, it is an error 
 +  * Functions can have a variable number of parameters 
 +  * Default parameter values are supported 
 +  * Function definitions can be nested 
 +  * Function names are not case sensitive 
 +  * The ''return'' function is used to return a value; if there is no ''return'', there is no returned value 
 +
 +
 +===== Function Parameters =====
 +
 +  * If the caller sends too many actual parameters, the subprogram ignores the extra ones 
 +  * If the caller does not send enough parameters, the unmatched formal parameters are ''unbound'' 
 +  * The default parameter passing method is //pass by value// (one-way communication) 
 +
 +===== Function Parameters (continued) =====
 +
 +  * To specify //pass-by-reference//, prepend an ampersand to the formal parameter:
 +<code php>
 +    function addOne(&$param) {
 +       $param++;
 +    }
 +
 +    $it = 16;
 +    addOne($it);  // $it is now 17
 +</code>
 +
 +===== Function Parameters (continued) =====
 +
 +  * If the function does not specify its parameter to be pass by reference, you can prepend an ampersand to the actual parameter and still get pass-by-reference semantics:
 +<code php>
 +    function subOne($param) {
 +      $param--;
 +    }
 +    
 +    $it = 16;
 +    subOne(&$it);   // $it is now 15
 +</code>
 +
 +===== Return Values =====
 +
 +  * Any type may be returned, including objects and arrays, using the ''return''
 +  * If a function returns a reference, the name of the function must have a prepended ampersand:
 +<code php>
 +   function &newArray($x) { ... }
 +</code>
 +
 +===== The Scope of Variables =====
 +
 +  * An undeclared variable in a function has the scope of the function
 +  * To access a nonlocal variable, it must be declared to be //global//, as in:
 +<code php>
 +   global $sum;
 +</code>
 +
 +
 +===== The Lifetime of Variables =====
 +
 +  * Normally, the lifetime of a variable in a function is from its first appearance to the end of the function's execution:
 +<code php>
 +    static $sum = 0;  # $sum is static
 +</code>
 +
 +
 +===== Pattern Matching =====
 +
 +  * PHP has two kinds:
 +    * POSIX 
 +    * Perl-compatible (''preg''
 +<code php>
 +        preg_match(regex, str [,array])
 +</code>
 +  * The optional ''array'' is where to put the matches 
 +
 +
 +===== Example =====
 +
 +The [[/eg-259/examples/lecture17/word_table.php|word_table.php]] ([[http://localhost/eg-259/examples/lecture17/word_table.php|word_table.php @ localhost]]) example illustrates the use of functions and regular expressions
 +
 +----
 +
 +  * //Code//:
 +<code php>
 +<!DOCTYPE html>
 +<!--    word_table.php
 +
 +Uses a function to split a given string of text into
 +its constituent words. It also determines the frequency of
 +occurrence of each word. The words are separated by
 +whitespace or punctuation, possibly followed by whitespace.
 +The punctuation can be a period, a comma, a semicolon, a
 +colon, an exclamation point, or a question mark.
 +The main driver program calls the function and displays
 +the results.
 +-->
 +<html lang="en">
 +  <head>
 +    <meta charset="utf-8" />
 +    <title> Word Table </title>
 +  </head>
 +  <body>
 +    <?php
 +
 +    // Function splitter
 +    //  Parameter: a string of text containing words and punctuation
 +    //  Returns: an array in which the unique words of the string are
 +    //           the keys and their frequencies are the values.
 +
 +    function splitter($str) {
 +
 +      // Create the empty word frequency array
 +
 +      $freq = array();
 +
 +      // Split the parameter string into words
 +
 +      $words = preg_split("/[ .,;:!?]\s*/", $str);
 +
 +      // Loop to count the words (either increment or initialize to 1)
 +
 +      foreach ($words as $word) {
 +        $keys = array_keys($freq);
 +        if (in_array($word, $keys))
 +          $freq[$word]++;
 +        else
 +          $freq[$word] = 1;
 +      }
 +
 +      return $freq;
 +    }#** End of splitter
 +
 +    // Main test driver
 +
 +    $str = "apples are good for you, or don't you like apples?
 +or maybe you like oranges better than apples";
 +
 +    // Call splitter
 +
 +    $tbl = splitter($str);
 +
 +    // Display the words and their frequencies
 +
 +    print "<br /> Word Frequency <br /><br />";
 +    $sorted_keys = array_keys($tbl);
 +    sort($sorted_keys);
 +    foreach ($sorted_keys as $word) {
 +      print "$word $tbl[$word] <br />";
 +    }
 +  ?>
 +  </body>
 +</html>
 +</code>
 +
 +  * Output of the example script
 +
 +  Word Frequency
 +  
 +  apples 3
 +  are 1
 +  better 1
 +  don't 1
 +  for 1
 +  good 1
 +  like 2
 +  maybe 1
 +  or 2
 +  oranges 1
 +  than 1
 +  you 3
 +
 +===== Summary of this Lecture =====
 +
 +//Further features of the PHP language with examples//
 +
 +  * [[eg-259:lecture17#arrays|Arrays]] 
 +  * [[eg-259:lecture17#functions|Functions]]
 +  * [[eg-259:lecture17#pattern_matching|Pattern Matching]]
 +
 +The [[eg-259:examples:php1#examples_from_lecture_17|Examples for PHP Part 2]].
 +
 +===== Learning Outcomes ====
 +
 +//At the end of this lecture you should be able to answer these questions//:
 +
 +  - In what two ways can arrays in PHP be created? 
 +  - What keys are used when an array is created but no keys are specified? 
 +  - Must all of the values of an array be of the same type? 
 +  - Must all of the keys of an array be of the same type? 
 +  - What exactly do the ''array_keys'' and ''array_values'' functions do? 
 +
 +
 +
 +
 +
 +===== Learning Outcomes (continued) =====
 +
 +//At the end of this lecture you should be able to answer these questions//:
 +
 +  - What exactly does the ''in_array'' function do? 
 +  - Explain the actions of the ''implode'' and ''explode'' functions. 
 +  - Describe the actions of the ''next'', ''reset'', and ''prev'' functions. 
 +  - What are the syntax and semantics of the two forms of the ''foreach'' statement? 
 +  - Describe the result of using the ''sort'' function on an array that has both string and numeric values. 
 +
 +
 +===== Learning Outcomes (continued) =====
 +
 +//At the end of this lecture you should be able to answer these questions//:
 +
 +  - What is the difference between the ''sort'' and ''asort'' functions? 
 +  - What happens if a script defines the same function more than once? 
 +  - Are function names case sensitive? 
 +  - What value is returned by a function if its execution does not end by executing a ''return'' statement? 
 +
 +
 +
 +===== Learning Outcomes (continued) =====
 +
 +//At the end of this lecture you should be able to answer these questions//:
 +
 +  - What are the two ways you can specify that a parameter is to be passed by reference? 
 +  - How can a variable used outside a function be accessed by the function? 
 +  - How can you define a variable in a function so that its lifetime extends beyond the time the function is in its first execution? 
 +
 +
 +===== Homework Exercises =====
 +
 +Write the following PHP functions and code to test them
 +
 +  - //Parameter//: An array of strings. //Return value//: A list of the unique strings in the parameter array.
 +  - //Parameter//: an array of numbers. //Return value//: The average and median of the parameter array.
 +  - //Parameter//: A string of numbers separated by spaces. //Return value//: The first four-digit number in the string.
 +
 +
 +===== Homework Exercises (continued) =====
 +
 +  - Modify the sample script ''word_table.php'' discussed in this lecture to place the output table in an XHTML table. 
 +
 +These and other PHP exercises are also available on the [[eg-259:homework:17|homework page]]. 
 +
 +
 +
 +
 +
 +
 +
 +
 +===== What's Next? =====
 +
 +**PHP for Web Applications**
 +
 +    * [[eg-259:lecture18#queries_and_query_strings|Queries and Query Strings]]
 +    * [[eg-259:lecture18#form_handling|Form Handling]]
 +    * [[eg-259:lecture18#files|Files]]
 +    * [[eg-259:lecture18#storing_information_about_client_state|Storing Information about Client State]]
 +    * [[eg-259:lecture18#session_tracking|Session Tracking]]
 +
 +
 +
 +[[eg-259:lecture16|Previous Lecture]] | [[eg-259:home]] | [[eg-259:lecture18|Next Lecture]]
eg-259/lecture17.txt · Last modified: 2013/03/08 18:04 by eechris