Learning lines and advice for beginners in PHP
We want to have a gradual learning process, here first to learn the process of PHP to summarize, this and a lot of learning PHP enthusiasts are the same:
(1) familiar with HTML/CSS/JS, the basic elements of the web, the completion stage can be self-made simple web pages, the element attributes are relatively familiar
(2) Understand the concept of dynamic language and operation mechanism, familiar with basic PHP syntax
(3) Learn how to combine PHP with HTML to complete a simple dynamic page
(4) Contact learning MySQL, start designing database
(5) Constantly consolidate PHP syntax, familiar with most common PHP functions, understand object-oriented programming, MySQL optimization, and some templates and frameworks
(6) Finally complete a full-featured dynamic site
Beginners do not see the above summary that PHP learning is very simple, programming is to need your serious thinking and continuous practice. Here is a detailed explanation of the PHP learning line. First of all, any site is composed of Web pages, that is, to complete a site, you must first learn to do Web pages, master static Web production technology is the prerequisite for learning to develop a website. So we have to learn HTML, for the future production site lay the foundation. Learning HTML should be learned while doing, any element of HTML to practice, only to understand what elements will play an effect after the deep memory, blindly reading is not possible
Assuming you can already complete a static page, then you should start to understand the dynamic language, just a touch of dynamic language, many people will have a lot of confusion, the code is not as direct output, but to be processed, HTML is through the HTML parser, and PHP also through the PHP parser, Like learning HTML, to make any parser work, you have to use its own syntax structure
Learning PHP, you should feel lucky, because if you learn other languages, you will find that PHP is relatively simple, at this stage, you have to understand the concept of HTML and PHP, you can now fully let PHP to you calculate a plus, a few, and then in the browser output. Don't be naïve, it's a small piece of code, but it's a big step toward your programming path. But now, you're still a rookie.
The next is to learn the database, MySQL can be said to be PHP's gold partner, we want to conquer this database, after you understand the concept of the database, you have to try to connect the database through PHP, and then use PHP successfully inserted, delete and update data
At this point, you may be in this state: Do you have HTML? Yes, I can make up a few forms of the page of the row board! Do you know PHP? Will, I will write one plus one operation in the function, and then call! Do you have MySQL? Yes, I can insert the data in the database and delete it!
So what's the next thing to do? Try to make a small message book, this is also a novice facing a level. It took a while, you finally learned to insert the form data into the database, and then show it, it should be said that a program of the prototype has been born. However, you may look at people this forum, that development CMS, when can I write one? Do not worry, and then consolidate the knowledge, familiar with the essentials of PHP and MySQL development, and then look back at the message you wrote, you may suspect that it is really you write it? At this time, you can perfect the message book you wrote. The message should be added to the registration and paging function, if possible, the UI can also be enhanced
Does that even have to be learned? No,no,no, it's early, you haven't touched oop yet? What about templates and frameworks? and continue to study! The PHP Framework provides a basic framework for building Web applications, simplifying the process of writing Web applications in PHP. Can save development time, and help build more stable applications. So, the PHP framework is a tool that you can use to save time and strengthen your code. When you first choose the PHP framework, it is recommended to try a few more, each framework has its own strengths and weaknesses, such as the Zend Framework due to various functions, and has a wide range of support systems, popular for a long time. While c++akephp is a PHP framework later than Zend, the corresponding support system is relatively small, but more convenient and easy to use
Once you understand the object-oriented and framework, you should touch the XML, in short, you will never find that you have all learned, learning! Learn something, never dream of a crash this said, more skills, but the lack of effort, it is useless. One thing you can guarantee is that you learn PHP, then learn other languages, definitely crash, the reverse is the same, if you have learned other languages before, then learn PHP must be fast
It is absolutely beneficial to learn more about the code of others ' success, so it is the best way to look at the classic code that has been thoroughly tempered. In addition, to emphasize that, learning a technology may encounter difficulties, may be confused, you may have learned half of PHP, and began to play C # idea, or some people say that Java is very good, this time you must not waver, to persist in the end, thoroughly learned.
Let's discuss the process of learning in stages:
First stage: Basic stage (basic PHP programmer)
Focus: LNMP Skilled (core is the basic operation of the installation configuration)
Objective: To complete basic LNMP system installation, simple configuration and maintenance, to be able to do basic PHP development of simple system, to support the development of a PHP function module in PHP medium-sized system.
Time: The time to complete this stage varies from person to person, and some grow up almost half a year on the past, growing slowly two or three years also have.
Basic command, operation, startup, basic service configuration (including RPM installation files, various service configurations, etc.); write simple shell scripts and awk/sed script commands.
To be able to install configuration nginx+php, know the basic nginx core configuration options, know Server/fastcgi_pass/access_log and other basic configuration, the goal is to enable NGINX+PHP_FPM to work smoothly.
Will build MySQL, know the basic MySQL configuration options, know the difference between InnoDB and MyISAM, know the different configuration options for InnoDB and MyISAM two engines; know the difference between the basic two engines and choose the difference above To build a MySQL database and configure the code to run normally and stably; The core idea is to be able to build a running MySQL database.
Basic syntax array, string, database, XML, Socket, gd/imagemgk image processing, and so on, familiar with the various links with the MySQL operation of the API (MYSQL/MYSQLI/PDO), know the resolution of various coding problems; know regular cooked Use PHP Frameworks (thinkphp, Zendframework, Yii, YAF, etc.), understand how basic MVC works and why, and know a little about the differences between different PHP frameworks; You can quickly learn an MVC framework. Be able to know the file directory organization in the development project, have the basic good code structure and the style, can complete the small system development and the medium system one module development work.
5. Front End
6. System Design
Can complete the basic design of the small system, including the simple database design, can complete the basic: Browser---nginx+php database architecture design and development work, can support hundreds of thousands of to millions of daily traffic website development and maintenance work;
Phase II: Improvement phase (intermediate PHP Programmer)
Focus: Improve the skills for LNMP, can be more comprehensive to the LNMP have skilled application.
Objective: To build a LNMP environment anytime, anywhere, to quickly complete the general configuration, to track down most of the development and online environment problems encountered, can independently bear the framework of the medium-sized system and development work, can assume a large system of a medium-sized module development.
On the basis of the first stage, we can use the shell script to do a lot of automated work smoothly, Awk/sed/perl is also very good, can complete a lot of text processing and data statistics, etc., basically can install most non-special Linux programs (including various libraries, packages, Third-party dependencies and so on, such as MONGODB/REDIS/SPHINX/LUNCENE/SVN); Learn about basic Linux services, know how to view Linux performance metrics data, know basic Linux problem tracking, and more.
In the first stage of the foundation, understand the complex nginx configuration, including multi-core configuration, events, proxy_pass,sendfile/tcp_* configuration, know the time-out and other related configuration and performance impact; I know nginx in addition to Web server, Also can assume proxy server, reverse static server and other configuration; know the basic Nginx configuration tuning; Know how to configure permissions, compile an nginx extension to nginx; know the basic nginx operating principle (Master/worker mechanism, epoll), Know why Nginx performance is better than Apache performance and other knowledge.
On the basis of the first stage, there are a number of tips on MySQL development, including regular SQL optimizations (group By/order By/rand Optimizations), and the ability to back up MySQL data in cold and hot, in addition to being able to build MySQL, and to know the impact innodb/ MyISAM configuration options for performance (such as key_buffer/query_cache/sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit, etc.), Also know how many of these options are configured to be appropriate; also know some special configuration options, such as know how to build MySQL master-slave synchronization environment, know the difference between the Binlog_format; know MySQL performance tracing, including Slow_log/explain, Knowledge of basic indexing and processing is also possible, and the principle of understanding basic MySQL architecture (server+ storage engine), knowing the basic Innodb/myisam index storage structure and different (clustered index, B-tree); know the basic INNODB transaction processing mechanism To understand most of the MySQL exception scenarios (or know where to find the processing solution). Conditions allow, it is recommended to understand the NoSQL representative MongoDB database, by contrast with the MySQL differences, colleagues can safely use MongoDB in the appropriate application scenarios, know the basic PHP with MongoDB development.
In most of the medium-sized system will be involved in the cache processing, so be sure to understand the basic cache; know the similarities and differences between Memcached and Redis and the application scenario, can install redis/memcached independently, understand some basic features and limitations of memcahed, such as the largest value values, know PHP with their use, Redis understand the basic work and use, understand the general data types, know what kind of scenarios to apply what type, understand Redis transactions and so on. Principle part, can understand the memory structure of memcached (slab mechanism), Redis understand the common data type underlying implementation of the storage structure (sds/linked list/skiplist/hashtable), and so on, by the way, know the Redis transaction, RDB, AoF and other mechanisms are better.
In addition to the first-stage capabilities, installation configuration is free to install PHP and various third-party extensions of the compiled installation configuration; Understand most of the configuration options and implications of PHP-FPM (such as Max_requests/max_children/request_terminate_ Timeout and the like to affect the performance of the configuration), know the difference between the mod_php/fastcgi, in PHP has been able to master a variety of basic technology, but also a variety of in-depth PHP, including a deep understanding of PHP object-oriented/spl/syntax aspects of special features such as reflection , in the framework has read at least one of the regular PHP MVC framework Code, know the basic PHP framework internal implementation mechanism and design ideas; in PHP development has been able to skillfully use the conventional design pattern to apply development (abstract Factory/SINGLETON/Observer/Command chain/policy/adapter and other modes) , it is recommended that you develop your own PHP MVC framework to fully liberalize your development, allow yourself to understand the MVC pattern, and enable you to quickly upgrade your Business Project development, familiarize yourself with PHP's various code optimization methods, and familiarize yourself with most of the PHP security issues. Familiar with basic mechanism of PHP execution (Zend Engine/extension Basic working mechanism).
6. C + +
began to dabble in a certain C + + language, be able to write basic C + + code, familiar with the basic C + + syntax (pointers, array operations, strings, general standard API) and data structures (linked list, tree, hash, queue) have a certain familiarity with the C language development below Linux has a basic understanding of the concept , will be simple makefile file writing, can use simple GCC/GDB program to compile simple debugging work, basic network programming have a general understanding. (This is to lay the groundwork for a higher level).
7. Front End
8. System Design
Able to design most of the medium-sized system Web site architecture, database, basic PHP framework selection, performance testing and processing, etc. can be completed similar to: browser----CDN (SQUID)------cache-------database structure of the Web site design and development maintenance , can support millions of to tens of thousands of daily traffic basic website development and maintenance work;
Phase III: Advanced stage (Advanced PHP programmer)
Emphasis: In addition to the basic LNMP program, you can also have in-depth learning in a certain direction or field. (Depth dimension development)
Objective: In addition to the ability to complete basic PHP business development, but also to solve most of the deep and complex technical problems, and can be independently designed to complete the large-scale system design and development work, oneself can hold into a technical direction independently, in this piece of comparative professional. (such as MySQL, Nginx, PHP, Redis, and so on in any direction in-depth research)
In addition to the second phase of the ability, under Linux in addition to the general operation and performance monitoring tracking, but also can use a lot of advanced complex commands to complete the work (watch/tcpdump/starce/ldd/ar, etc.); in Shell scripting, has been able to write more complex shell scripts (more than 500 lines) to assist in the completion of a lot of tasks including backup, automated processing, monitoring and other work of the shell, Awk/sed/perl and other applications such as fire pure green, able to manipulate the arbitrary control processing text statistical analysis of various complex formats of data , there is some understanding of the internal mechanism of Linux, the kernel module loading, startup error handling and so on have a basic processing, but also some other related things, such as NFS, Disk Management and so on;
In the second stage of the foundation, has been able to operate the nginx very skilled, can be more in-depth operation of nginx, such as monitoring, performance optimization, complex problem processing and so on; looking at personal interests, more aspects can be considered to focus on the Nginx working principle part of the deep learning, Mainly in the reading source, such as the specific master/worker work mechanism, nginx internal event processing, memory management and so on, but also can learn the development of Nginx extension, you can customize some of your own private extensions, but also to nginx+lua a certain degree of understanding, To see if a better model can be combined, the requirement of this stage is an in-depth understanding of the nginx principle, which can be considered as an in-depth professional in the nginx direction.
In the second stage of the foundation, in the MySQL application, in addition to the previous basic SQL optimization, but also in the completion of a number of complex operations, such as the import and export of large quantities of data, a large number of online data change table structure or delete index fields and other high-risk operations; In addition to the installation configuration, have been able to deal with more complex MySQL problems, such as the tracing of various problems, master-Slave synchronization delay problem resolution, cross-room synchronization data scheme, MySQL high-availability architecture, etc. are involved in understanding; for MySQL application level, the core key technologies of MySQL are familiar, such as the transaction mechanism (Isolation level , locks, etc.), to trigger, partition and other technologies have a certain understanding and application; For MySQL performance, there are disk optimizations (SAS migration to SSD), Server optimizations (memory, server itself configuration), and other core performance tuning options in addition to the two phase (Innodb_log_buffer_ Size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_timeout, etc.), connection pooling software selection application, to show * (Show Status/show Profile) class operation statements have in-depth understanding, to complete most of the performance problem tracking; MySQL backup technology in-depth familiarity, including disaster recovery, deep understanding of Binlog, hot and cold backup, multi-IDC backup, etc. in the MySQL principle, there is more understanding, For example, the working mechanism of MySQL began to read some of the source code, such as the master-slave Synchronization (replication) technology source learning, or to a storage engine (MYISAM/INNODB/TOKUDB) and so on the source learning understanding, if the conditions allow, You can refer to the CSV engine to develop your own simple storage engine to save some data and enhance your understanding of MySQL, and in this process, if you are interested, you can also consider moving to DBA. MongoDB level, you can consider, for example, in the case of writing less read more and start to apply MongoDB online, or do some online data analysis processing operations, specific scenarios can follow the work, but the core is to better understand the Rmdbs and NoSQL different scenarios below the application, If the conditions or interests allow, you can begin to learn more about MongoDB's working mechanism.
In the second stage of the foundation, can be more in-depth application and learning. Because memcached is not particularly complex, it is suggested that the source code can be read, especially the memory management part, to facilitate in-depth understanding; Redis section, you can do more complex data structure of the application (Zset to do the leaderboard sort operations/ Transaction processing is used to ensure atomicity in the use of the second-class scene application and other applications, and more involved in the AOF and other synchronization mechanisms of learning applications, design a highly available Redis application architecture and clusters; It is suggested that we can learn the source of Redis in depth and apply the knowledge accumulated in the second stage. Especially you can read about it, including core event management, memory management, internal core data structure, and so on. If interest permits, you can become a very professional user of Redis.
As a basic core skill, we need more in-depth learning and application on the basis of the second stage. From the basic code application above, can solve the PHP development encountered 95% of the problem, understand most of the PHP skills, for most of the PHP framework can be quickly used in a day, and understand the pros and cons of various mainstream PHP framework, can quickly facilitate the development of the project to do technology selection, in the configuration, in addition to The general second stage of knowledge, will understand some of the more biased gate configuration options (PHP auto_prepend_file/auto_append_file), including some of the extensions of the complex Advanced configuration and principles (such as the memcached extension configuration in the Memcache.hash_strategy, APC extended configuration, apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection, etc.) , to understand the working mechanism of PHP, including PHP-FPM working mechanism (such as PHP-FPM under different configuration machine to open process number calculation and principle), Zend Engine has a basic familiarity (vm/gc/stream processing), Read the basic PHP kernel source code (or read the related article), the most core data structure of PHP internal mechanism (basic type/array/object) implementation has the understanding, for the core Infrastructure (ZVAL/HASHTABLE/GC) have in-depth learning to understand , be able to carry out basic PHP extension development, understand some advanced knowledge of extended development (minit/rinit, etc.), familiar with PHP and Apache/nginx different communication interaction mode details (mod_php/fastcgi), in addition to developing PHP extensions, Consider learning to develop Zend extensions to understand PHP from a lower level.
6. C + +
On the basis of the second stage, we can have a more in-depth understanding of the C + + language, and can complete the development of small and medium-sized/C + + systems. In addition to the basic second-stage base C/d syntax and data structure, you can learn some special data structures (b-tree/rb-tree/ Skiplist/lsm-tree/trie-tree, etc.) convenient in the special work of the requirements, in the system programming, familiar with multi-process, multi-threaded programming, multi-process situation below to understand the majority of multi-process communication, flexible choice of communication mode (shared memory/semaphore/pipeline, etc.) Multi-threaded programming can solve the problem of lock conflict, and be able to develop and debug multi-thread program, and be familiar with network programming, understand the difference and selection of multi-process model/multithreaded model/asynchronous Network IO Model, and be familiar with the principle and difference of different asynchronous network IO models (select/poll/ EPOLL/IOCP, etc.), and familiar with the common asynchronous framework (Ace/ice/libev/libevent/libuv/boost.asio, etc.) and use, if leisure can also look at some of China's own developed libraries (such as Muduo), but also able to design high concurrency Program Architecture (Leader-follow/master-worker, etc.); understand the problems (memory management, log printing, high concurrency, front-end communication Protocol, service monitoring) in most of C/+ + + back-end server development, and know the RPC communication problems of each backend service (struct /HTTP/THIRFT/PROTOBUF, etc.); can be more familiar with the use of GCC and GDB to develop the compilation of debugging procedures, the online program core can be quickly traced to follow-up to solve the problem; general-purpose module development, to accumulate or develop some common tools or libraries (such as asynchronous network framework, Log library, memory pool, thread pool, etc.), but whether to use caution after development, save the pit to chase the bug.
7. Front End
8. Other areas of language learning
In the basic php/c/c++ language aspect has the fundamental accumulation, the suggestion in the current stage may try to learn the different programming language, sees the personal interest hobby, the script language can learn python/ruby and so on, the functional programming language may try Lisp/haskell/scala/ Erlang and the like, static language can try Java/golang, data statistical analysis can understand the R language, if you want to change perspective to do back-end business, you can try node. js and the previous mentioned with the Nginx combination of Nginx_lua and so on. Learning different languages is mainly about improving your horizons and solving the differences between the means, such as understanding the process/thread, as well as the lightweight association, for example, under the cross-machine communication scenario, Erlang's solution is surprisingly simple, for example, if you do not want to choose C + +, there are similar efficient Erlang/ Golang can be used, etc., mainly to enhance the field of vision.
9. Other Professional Direction learning
In this stage, in addition to the basic LNMP skills, will consider a number of other areas of knowledge learning, these are available, look at personal interests and long-term goal direction. At present, the situation can choose more areas, such as cloud computing (distributed storage, distributed computing, virtual machines, etc.), machine learning (data mining, pattern recognition, application to statistics, personalized recommendations), Natural language processing (Chinese word segmentation, etc.), search engine technology, graphic images, speech recognition and so on. In addition to these tall, there are many partial engineering aspects can be learned, such as high-performance systems, mobile development (Android/ios), computer security, embedded systems, hardware and other directions.
10. System Design
System design on the basis of the second stage, can apply the mastered experience and skills, design a more complex medium and large system, can solve most of the problems of complex systems on the line, complete similar browser-like CDN, load balancer, such as access layer, nginx+php-& Gt Business Cache--database--Complex backend RPC interaction (storage backend, logical backend, anti-cheat backend, external service)--more complex services for back-end Jiangzi, capable of supporting normal development and maintenance work for tens of millions of to hundreds of millions of traffic sites per day.
Finally, share 10 PHP performance optimization tips to help you better with PHP development:
1,, foreach more efficient, try to use foreach instead of while and for loop
2, inside the loop do not declare variables, especially objects such as variables
3, in multiple nested loops, if possible, the longest cycle should be placed in the inner layer, the shortest loop on the outer layers, thereby reducing the number of cycles of the CPU across the loop layer, optimize program performance
4, use single quotes instead of double quotation marks to reference strings for PHP performance optimization
5, use I+=1 instead of i=i+1. In line with C + + habits, high efficiency
6, optimize the Select SQL statement, as far as possible in the case of INSERT, update operation, to achieve the purpose of PHP performance optimization
7,, as far as possible to file operations, although the PHP file operation efficiency is not low
8. Use PHP intrinsics as much as possible
9, in the case of PHP internal string manipulation function, do not use regular expressions
10, feof, Fgets, fopen, in the case can be used file_get_contents alternative file, series of methods, try to use file_get_contents, because it is much more efficient. But pay attention to the PHP version of file_get_contents when opening a URL file