Zend PHP Certification Study Guide- P3


lượt xem

Zend PHP Certification Study Guide- P3

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ


Chủ đề:

Nội dung Text: Zend PHP Certification Study Guide- P3

  1. 24 Chapter 1 The Basics of PHP default: echo ‘I don\’t know what to do’; break; } ?> When the interpreter encounters the switch keyword, it evaluates the expression that follows it and then compares the resulting value with each of the individual case condi- tions. If a match is found, the code is executed until the keyword break or the end of the switch code block is found, whichever comes first. If no match is found and the default code block is present, its contents are executed. Note that the presence of the break statement is essential—if it is not present, the interpreter will continue to execute code in to the next case or default code block, which often (but not always) isn’t what you want to happen.You can actually turn this behavior to your advantage to simulate a logical or operation; for example, this code Could be rewritten as follows:
  2. Iteration and Loops 25 Once inside the switch statement, a value of 1 or 2 will cause the same actions to take place. Iteration and Loops Scripts are often used to perform repetitive tasks.This means that it is sometimes neces- sary to cause a script to execute the same instructions for a number of times that might—or might not—be known ahead of time. PHP provides a number of control structures that can be used for this purpose. The while Structure A while statement executes a code block until a condition is set: Clearly, you can use a condition that can never be satisfied—in which case, you’ll end up with an infinite loop. Infinite loops are usually not a good thing, but, because PHP pro- vides the proper mechanism for interrupting the loop at any point, they can also be use- ful. Consider the following:
  3. 26 Chapter 1 The Basics of PHP In this script, the (true) condition is always satisfied and, therefore, the interpreter will be more than happy to go on repeating the code block forever. However, inside the code block itself, we perform two if-then checks, and the second one is dependent on the first so that the $b > 50 will only be evaluated after $a > 100, and, if both are true, the break statement will cause the execution point to exit from the loop into the preceding scope. Naturally, we could have written this loop just by using the condition ($a
  4. Iteration and Loops 27 echo $i; } ?> As you can see, the declaration of a for loop is broken in to three parts:The first is used to perform any initialization operations needed and is executed only once before the loop begins.The second represents the condition that must be satisfied for the loop to contin- ue. Finally, the third contains a set of instructions that are executed once at the end of every iteration of the loop before the condition is tested. A for loop could, in principle, be rewritten as a while loop. For example, the previ- ous simple script can be rewritten as follows: As you can see, however, the for loop is much more elegant and compact. Note that you can actually include more than one operation in the initialization and end-of-loop expressions of the for loop declaration by separating them with a comma: Naturally, you can also create a for loop that is infinite—in a number of ways, in fact. You could omit the second expression from the declaration, which would cause the interpreter to always evaluate the condition to true.You could omit the third expression and never perform any actions in the code block associated with the loop that will cause the condition in the second expression to be evaluated as true.You can even omit all three expressions using the form for(;;) and end up with the equivalent of while(true).
  5. 28 Chapter 1 The Basics of PHP Continuing a Loop You have already seen how the break statement can be used to exit from a loop.What if, however, you simply want to skip until the end of the code block associated with the loop and move on to the next iteration? In that case, you can use the continue statement: If you nest more than one loop, you can actually even specify the number of loops that you want to skip and move on from: In this case, when the execution reaches the inner while loop, if $c is less than 10, the continue 2 statement will cause the interpreter to skip back two loops and start over with the next iteration of the for loop. Functions and Constructs The code that we have looked at up to this point works using a very simple top-down execution style:The interpreter simply starts at the beginning and works its way to the end in a linear fashion. In the real world, this simple approach is rarely practical; for example, you might want to perform a certain operation more than once in different portions of your code.To do so, PHP supports a facility known as a function.
  6. Functions and Constructs 29 Functions must be declared using the following syntax: function function_name ([param1[, paramn]]) As you can see, each function is assigned a name and can receive one or more parame- ters.The parameters exist as variables throughout the execution of the entire function. Let’s look at an example: The $years variable is created whenever the calc_weeks function is called and initial- ized with the value passed to it.The return statement is used to return a value from the function, which then becomes available to the calling script.You can also use return to exit from the function at any given time. Normally, parameters are passed by value—this means that, in the previous example, a copy of the $my_years variable is placed in the $years variable when the function begins, and any changes to the latter are not reflected in the former. It is, however, possi- ble to force passing a parameter by reference so that any changes performed within the function to it will be reflected on the outside as well: You can also assign a default value to any of the parameters of a function when declaring it.This way, if the caller does not provide a value for the parameter, the default one will be used instead:
  7. 30 Chapter 1 The Basics of PHP In this case, because no value has been passed for $my_years, the default of 10 will be used by the interpreter. Note that you can’t assign a default value to a parameter passed by reference. Functions and Variable Scope It’s important to note that there is no relationship between the name of a variable declared inside a function and any corresponding variables declared outside of it. In PHP, variable scope works differently from most other languages so that what resides in the global scope is not automatically available in a function’s scope. Let’s look at an example: In this particular case, the script assumes that the $years variable, which is part of the global scope, will be automatically included in the scope of calc_weeks(). However, this does not take place, so $years has a value of Null inside the function, resulting in a return value of 0. If you want to import global variables inside a function’s scope, you can do so by using the global statement:
  8. Functions and Constructs 31 $years += 10; return $years * 52; } $years = 28; echo calc_weeks (); ?> The $years variable is now available to the function, where it can be used and modi- fied. Note that by importing the variable inside the function’s scope, any changes made to it will be reflected in the global scope as well—in other words, you’ll be accessing the variable itself, and not an ad hoc copy as you would with a parameter passed by value. Functions with Variable Parameters It’s sometimes impossible to know how many parameters are needed for a function. In this case, you can create a function that accepts a variable number of arguments using a number of functions that PHP makes available for you: n func_num_args() returns the number of parameters passed to a function. n func_get_arg($arg_num) returns a particular parameter, given its position in the parameter list. n func_get_args() returns an array containing all the parameters in the parameter list. As an example, let’s write a function that calculates the arithmetic average of all the parameters passed to it:
  9. 32 Chapter 1 The Basics of PHP As you can see, we start by determining the number of arguments and exiting immedi- ately if there are none.We need to do so because otherwise the last instruction would cause a division-by-zero error. Next, we create a for loop that simply cycles through each parameter in sequence, adding its value to the sum. Finally, we calculate and return the average value by dividing the sum by the number of parameters. Note how we stored the value of the parameter count in the $args variable—we did so in order to make the script a bit more efficient because otherwise we would have had to perform a call to func_get_args() for every cycle of the for loop. That would have been rather wasteful because a function call is quite expensive in terms of performance and the number of parameters passed to the function does not change during its execution. Variable Variables and Variable Functions PHP supports two very useful features known as “variable variables” and “variable func- tions.” The former allows you use the value of a variable as the name of a variable. Sound confusing? Look at this example: When this script is executed and the interpreter encounters the $$b expression, it first determines the value of $b, which is the string a. It then reevaluates the expression with a substituted for $b as $a, thus returning the value of the $a variable. Similarly, you can use a variable’s value as the name of a function:
  10. Exam Prep Questions 33 $a($n); ?> At the end of the script, $a will contain either odd_number or even_number.The expres- sion $a($n) will then be evaluated as a call to either odd_number() or even_number(). Variable variables and variable functions can be extremely valuable and convenient. However, they tend to make your code obscure because the only way to really tell what happens during the script’s execution is to execute it—you can’t determine whether what you have written is correct by simply looking at it. As a result, you should only really use variable variables and functions when their usefulness outweighs the potential problems that they can introduce. Exam Prep Questions 1. What will the following script output? A. 2 B. 1 C. Null D. True E. 3 Answer B is correct. Because of operator precedence, the modulus operation is performed first, yielding a result of 2 (the remainder of the division of 5 by 2). Then, the result of this operation is subtracted from the integer 3. 2. Which data type will the $a variable have at the end of the following script?
  11. 34 Chapter 1 The Basics of PHP A. (int) 1 B. (string) “1” C. (bool) True D. (float) 1.0 E. (float) 1 Answer B is correct.When a numeric string is assigned to a variable, it remains a string, and it is not converted until needed because of an operation that requires so. 3. What will the following script output? A. 2 B. 1 C. 3 D. 0 E. Null Answer A is correct.The expression $a— will be evaluated after the expression $a = $a + 1 but before the assignment.Therefore, by the time $a + 1 is assigned to $a, the increment will simply be lost.
  12. 2 Object-Oriented PHP D ESPITE BEING A RELATIVELY RECENT—and often maligned—addition to the comput- er programming world, object-oriented programming (OOP) has rapidly taken hold as the programming methodology of choice for the enterprise. The basic concept behind OOP is encapsulation—the grouping of data and code ele- ments that share common traits inside a container known as a class. Classes can be organ- ized hierarchically so that any given one can inherit some or all the characteristics of another one.This way, new code can build on old code, making for more stable and reli- able code (at least, in theory). Because it was added by the designers almost as an afterthought, the implementation of OOP in PHP 4 differs from the traditional implementations provided by most other languages in that it does not follow the traditional tenets of object orientation and is, therefore, fraught with peril for the programmer who approaches it coming from a more traditional platform. Terms You’ll Need to Understand n Namespace n Class n Object n Method n Property n Class member n Instantiation n Constructor n Inheritance n Magic function
  13. 36 Chapter 2 Object-Oriented PHP Techniques You’ll Need to Master n OOP fundamentals n Writing classes n Instantiating objects n Accessing class members n Creating derivate classes n Serializing and unserializing objects Getting Started As we mentioned previously, the basic element of OOP is the class. A class contains the definition of data elements (or properties) and functions (or methods) that share some com- mon trait and can be encapsulated in a single structure. In PHP, a class is declared using the class construct: As you can see here, the class keyword is followed by the name of the class, my_class in our case, and then by a code block where a number of properties and methods are defined. Data properties are defined by using the var keyword followed by the name of the variable.You can even assign a value to the property by using the following syntax: var $my_var = ‘a value’; Following property declarations, we define a method, which in this special case has the same name as the class.This designates it as the class’ constructor—a special method that is automatically called by the interpreter whenever the class is instantiated. You’ll notice that, inside the constructor, the value of the $var parameter is assigned to the $my_var data property by using the syntax $this->my_var = $var.The $this
  14. Classes as Namespaces 37 variable is a reference to the current object that is only available from within the meth- ods of a particular class.You can use it to access the various methods and properties of the class.Thus, $this means “the current instance of the class,” whereas the -> indirec- tion operator informs the interpreter that you’re trying to access a property or method of the class. As you can imagine, methods are accessed as $this->method(). Instantiating a Class: Objects You cannot use a class directly—it is, after all, nothing more than the declaration of a special kind of data type.What you must do is to actually instantiate it and create an object.This can be done by using the new operator, which has the highest possible precedence: The new operator causes a new instance of the my_class class to be created and assigned to $obj. Because my_class has a constructor, the object’s instantiation automatically calls it, and we can pass parameters to it directly. From this point on, properties and methods of the object can be accessed using a syn- tax similar to the one that we saw in the previous section except, of course, that $this doesn’t exist outside the scope of the class itself, and instead we must use the name of the variable to which we assigned the object. Classes as Namespaces After a class is defined, its methods can be accessed in one of two ways: dynamically, by instatiating an object, or statically, by treating the class as a namespace. Essentially, name- spaces are nothing more than containers of methods:
  15. 38 Chapter 2 Object-Oriented PHP As you can see in the previous example, the :: operator can be used to statically address one of the methods of a class and execute it. Grouping a certain number of methods into a class and then using that class as a namespace can make it easier to avoid naming conflicts in your library, but, generally speaking, that’s not reason enough by itself to jus- tify the overhead caused by using classes. Objects and References The biggest problem working with objects is passing them around to function calls.This is because objects behave in exactly the same way as every other data type: By default, they are passed by value. Unlike most other values, however, you will almost always cause an object to be modified when you use it. Let’s take a look at an example:
  16. Objects and References 39 $obj_instance = $this; $this->my_var = $var; } } $obj = new my_class (“something”); echo $obj->my_var; echo $obj_instance->my_var; ?> As you can see, the constructor here assigns the value of $this to the global variable $obj_instance.When the value of $obj_instance->my_var is printed out later in the script, however, the expected something doesn’t show up—and the property actually has a value of NULL. To understand why, you need to consider two things. First, when $this is assigned to $obj_instance, it is assigned by value, and this causes PHP to actually create a copy of the object so that when $var is assigned to $this->my_var, there no longer is any con- nection between the current object and what is stored in $obj_instance. You might think that assigning $this by reference might make a difference: Unfortunately, it doesn’t—as much as this might seem extremely odd, you’ll find the fol- lowing even stranger:
  17. 40 Chapter 2 Object-Oriented PHP Assigning a reference to $this to a scalar variable hasn’t helped, but by making $obj_instance an array, the reference was properly passed.The main problem here is that the $this variable is really a special variable built ad hoc for the internal use of the class—and you really shouldn’t rely on it being used for anything external at all. Even though this solution seems to work, incidentally, it really didn’t.Try this:
  18. Objects and References 41 echo $obj->my_var; echo $obj_instance[0]->my_var; ?> If $obj_instance had really become a reference to $obj, we would expect a change to the latter to be reflected also in the former. However, as you can see if you run the pre- ceding script, after we have changed the value of $obj->my_var to nothing, $obj_instance still contains the old value. How is this possible? Well, the problem is in the fact that $obj was created with a simple assignment. So what really happened is that new created a new instance of my_class, and a reference to that instance was assigned to $obj_instance by the con- structor.When the instance was assigned to $obj, however, it was assigned by value— therefore, a copy was created, leading to the two variables holding two distinct copies of the same object. In order to obtain the effect we were looking for, we have to change the assignment so that it, too, is done by reference: Now, at last, $obj_instance is a proper reference to $obj. Generally speaking, this is the greatest difficulty that faces the user of objects in PHP. Because they are treated as normal scalar values, you must assign them by reference whenever you pass them along to a function or assign them to a variable.
  19. 42 Chapter 2 Object-Oriented PHP Naturally, you can turn this quirk in PHP 4 to your advantage as well by using a by- value assignment whenever you want to make a copy of an object. Be careful, however, that even the copy operation might not be what you expect. For example, if your object includes one or more variables that contain resources, only the variables will be duplicat- ed, not the resources themselves.This difference is subtle, but very important because the underlying resources will remain the same so that when they are altered by one object, the changes will be reflected in the copy as well. Implementing Inheritance Classes can gain each other’s properties and methods through a process known as inheri- tance. In PHP, inheritance is implemented by “extending” a class:
  20. Implementing Inheritance 43 As you can see here, the extends keyword is used to add the methods and properties of the base class base_class to new_class, which defines new variables and a new con- structor.The calc_pow function, which is defined in the base class, becomes immediately available to the new class and can be called as if it were one of its methods. Note, however, that only the constructor for the new class is called—the old class’ is completely ignored.This might not be always what you want—in which case, you can access each of the parent’s methods statically through the parent built-in namespace that PHP defines for you inside your object: In this example, the parent constructor is called by the new constructor as if it were a normal static function, although the former will have at its disposal all of its normal methods and properties.
Đồng bộ tài khoản