Jump to content
  • 0

Непонятные вещи в учебнике


deadrash
 Share

Question

Читаю Объектно-ориентированное программирование на PHP 5 Питера Ловейна, по ходу чтения возникают вопросы которые в книге не затрагиваются, а вопросы совсем ерундовые, по тем что не гуглятся задам здесь, буду признателен любому ответу!! Надеюсь вопросов будет не много :)

В общем такой вопрос.

В начале даётся такой простенький класс с помощью него можно вывести список изображений находящиеся в определённой директории. Я не понимаю для чего там в конструкторе создаётся переменная $d = ''; зачем создавать пустую переменную если двумя строчками ниже она создаётся сразу с присвоением значения?

И в методе checkAllImages() там тоже создаётся пустая переменная $extension=''; до присвоения значения.

Для чего он так делает?

<?php
class DirectoryItems{
//data members
var $filearray = array();
////////////////////////////////////////////////////////////////////
//constructor
////////////////////////////////////////////////////////////////////
function DirectoryItems($directory){
$d = '';
if(is_dir($directory))
{
$d = opendir($directory) or die("Couldn't open directory.");
while(false !== ($f = readdir($d)))
{
if(is_file("$directory/$f"))
{
$this->filearray[]=$f;
}
}
closedir($d);
}else{
//error
die('Must pass in a directory.');
}
}
////////////////////////////////////////////////////////////////////
//public functions
////////////////////////////////////////////////////////////////////
function indexOrder(){
sort($this->filearray);
}
////////////////////////////////////////////////////////////////////
function naturalCaseInsensitiveOrder(){
natcasesort($this->filearray);
}
////////////////////////////////////////////////////////////////////
function checkAllImages(){
$bln=true;
$extension='';
$types= array('jpg', 'jpeg', 'gif', 'png');
foreach ($this->filearray as $value){
$extension = substr($value,(strpos($value, ".")+1));
$extension = strtolower($extension);
if(!in_array($extension, $types)){
$bln = false;
break;
}
}
return $bln;
}
////////////////////////////////////////////////////////////////////
function getCount() {
return count($this->filearray);
}
////////////////////////////////////////////////////////////////////
function getFileArray(){
return $this->filearray;
}
}//end class
////////////////////////////////////////////////////////////////////
?>

Edited by deadrash
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Это называется инициализация переменной. Нужна она как минимум для того, чтобы человек, читающий код, понял, какого типа эта переменная. Раз уж в php нет строгой типизации, то хотя бы так.

Но в данном примере типы всё равно не соблюдаются, значит это нужно затем, чтобы если не сработает is_dir($directory) $d всё равно была определена. Только не знаю зачем. Попробуйте взять другой учебник, тут какие-то примеры весьма странные. И со scandir наверное меньше кода бы было, например.

Edited by Int
Link to comment
Share on other sites

  • 0

Ааа... странно, я думал там какая-то чёрная магия... а оказалось так просто. И всё равно не совсем понял, ведь при присвоении ей чего либо её тип может измениться самым естественным образом и это только запутает читателя наверное. Короче надо подумать посильней над этим, рас уж пользуются ...

Link to comment
Share on other sites

  • 0

Ну это уже на совести разработчика. Классическая инициализация нужна чтобы очистить переменную от мусора, который мог бы в ней оказаться при запуске программы.

Как уж там это паскале-то...

var a:integer;
begin writeln(a); end.

На выходе можно получить совершенно неожиданные вещи.

const a:integer=0; begin writeln(a); end.

А примерно вот так всё будет нормально. Я на паскале лет уж 7 ничего не писал, могу и ошибиться в синтаксисе. И скорее всего ошибся в типизированной константе, лень щас гуглить.

Ну а раз в php вышеозначенной проблемы нет, то запись $a=''; можно использовать только как "я планирую хранить тут строку". Всё-таки, не так уж и часто тип данных в переменных меняется. Разве что при выводе или при каких-то операциях. Лично я избегаю вещей типа $a='20'; $b=$a+4;

Самый простой пример, где сабж будет уместен:

$page=0;

if (isset($_GET['page'])) $page=(int)$_GET['page'];

echo $page;

Edited by Int
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy